从 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 字符串获取结果集元素的正则表达式是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

用于获取XML元素内容的正则表达式

php正则表达式是啥?

正则表达式仅从字符串中获取 NUMBER

re模块

从字符串中提取所有表情符号的正则表达式是啥?

python--爬虫(XPath与xml类库)