Xpath选择带有节点的转义节点

时间:2012-06-08 02:29:25

标签: c# .net xml xslt xpath

我有这个xml:

<text>
    blah blah &lt;strong&gt; hello &lt;/strong&gt; more text &lt;strong&gt;hello again&lt;/strong&gt; blah blah
</text>

如何选择使用&lt&gt

转义的强标记内的文字

在此示例中,选择应为:

  1. 你好
  2. 你好再次
  3. 更新需要XSLT 1.0

2 个答案:

答案 0 :(得分:0)

由于您已更新说明您只能使用XSLT 1 - 请参阅此帖子:How to use XSLT 1.0 or XPath to manipulate an HTML string

这有点复杂,但是:

替换&lt ;,&gt;和&amp;你要三次清理它......

以下是一些可以帮助您入门的XSLT:

<xsl:variable name="cleanXML">
  <xsl:call-template name="SubstringReplace">
    <xsl:with-param name="stringIn">
      <xsl:call-template name="SubstringReplace">
        <xsl:with-param name="stringIn">
          <xsl:call-template name="SubstringReplace">
            <xsl:with-param name="stringIn">
              <xsl:call-template name="SubstringReplace">
                <xsl:with-param name="stringIn" select="$theXml"/>
                <xsl:with-param name="substringIn" select="'&amp;lt;'"/>
                <xsl:with-param name="substringOut" select="'&lt;'"/>
              </xsl:call-template>
            </xsl:with-param>
            <xsl:with-param name="substringIn" select="'&amp;gt;'"/>
            <xsl:with-param name="substringOut" select="'&gt;'"/>
          </xsl:call-template>
        </xsl:with-param>
        <xsl:with-param name="substringIn" select="'&amp;amp;'"/>
        <xsl:with-param name="substringOut" select="'&amp;'"/>
      </xsl:call-template>
    </xsl:with-param>
  </xsl:call-template>
</xsl:variable>

答案 1 :(得分:0)

这是一个C#实现。

使用的名称空间

using System.Xml
using System.Web

实施

     //Read xml file
     string xmlText = "<text>blah blah &lt;strong&gt; hello &lt;/strong&gt; more text &lt;strong&gt;hello again&lt;/strong&gt; blah blah</text>";
     System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
     doc.LoadXml(HttpUtility.HtmlDecode(xmlText));
     XmlNodeList Nodes =  doc.GetElementsByTagName("strong");

     List<string> nodeValues= new List<string>();
     foreach (XmlNode Node in Nodes)
     {
         nodeValues.Add(Node.InnerText);
     }