从 xml 字符串获取结果集元素的正则表达式是啥? [复制]
Posted
技术标签:
【中文标题】从 xml 字符串获取结果集元素的正则表达式是啥? [复制]【英文标题】:What is the Regex expression to get resultset element from xml string? [duplicate]从 xml 字符串获取结果集元素的正则表达式是什么? [复制] 【发布时间】:2019-08-09 09:01:03 【问题描述】:希望帮助从我的整个 XML 中修剪结果集元素。不需要 XML 字符串的模式。只想要xmls的resultSet元素。
下面是我的 xml 字符串:
<NewDataSet>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="NewDataSet">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="resultSet" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="resultSet">
<xs:complexType>
<xs:sequence>
<xs:element name="Name" type="xs:string" minOccurs="0" />
<xs:element name="WAMUserName" type="xs:string" minOccurs="0" />
<xs:element name="AppPoolState" type="xs:string" minOccurs="0" />
<xs:element name="Validation" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<resultSet>
<Name />
<WAMUserName />
<AppPoolState />
<Validation />
</resultSet>
<resultSet>
<Name>W3SVC/APPPOOLS/KTSAAppPool</Name>
<WAMUserName>ST\nzsktsa</WAMUserName>
<AppPoolState>Disabling</AppPoolState>
<Validation>Critical</Validation>
</resultSet>
<resultSet>
<Name>W3SVC/APPPOOLS/KCPSAAppPool</Name>
<WAMUserName>st\nzsOFSA</WAMUserName>
<AppPoolState>Running</AppPoolState>
<Validation>Critical</Validation>
</resultSet>
</NewDataSet>
希望下面的输出作为正则表达式的一部分。
<resultSet>
<Name />
<WAMUserName />
<AppPoolState />
<Validation />
</resultSet>
<resultSet>
<Name>W3SVC/APPPOOLS/KTSAAppPool</Name>
<WAMUserName>ST\nzsktsa</WAMUserName>
<AppPoolState>Disabling</AppPoolState>
<Validation>Critical</Validation>
</resultSet>
<resultSet>
<Name>W3SVC/APPPOOLS/KCPSAAppPool</Name>
<WAMUserName>st\nzsOFSA</WAMUserName>
<AppPoolState>Running</AppPoolState>
<Validation>Critical</Validation>
</resultSet>
【问题讨论】:
您使用什么语言或工具?使用 XML 解析器可能会更好。 基于 Java 的 chatOps 平台。问题是,我们只有正则表达式,但没有 XML 解析器 :( 【参考方案1】:您的代码一团糟。但是,您不应该使用 RegEx 来处理 XML 文件。使用 XSLT 处理器,例如 xsltproc
(Linux) 或 Saxon
(Java) 或 Xerces
(Java)。
使用 XSLT-1.0 处理器,您可以使用以下模板轻松提取 resultSet
元素。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- identity template -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="/NewDataSet">
<xsl:apply-templates select="resultSet" />
</xsl:template>
</xsl:stylesheet>
将其应用于您的 XML 文件,结果将是
<?xml version="1.0"?>
<resultSet>
<Name/>
<WAMUserName/>
<AppPoolState/>
<Validation/>
</resultSet>
<resultSet>
<Name>W3SVC/APPPOOLS/KTSAAppPool</Name>
<WAMUserName>ST\nzsktsa</WAMUserName>
<AppPoolState>Disabling</AppPoolState>
<Validation>Critical</Validation>
</resultSet>
<resultSet>
<Name>W3SVC/APPPOOLS/KCPSAAppPool</Name>
<WAMUserName>st\nzsOFSA</WAMUserName>
<AppPoolState>Running</AppPoolState>
<Validation>Critical</Validation>
</resultSet>
该命令取决于您的 XSLT 处理器。
【讨论】:
以上是关于从 xml 字符串获取结果集元素的正则表达式是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章