2012-06-08 37 views
0

我有這樣的XML:Xpath的選擇逃跑節點與節點

<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. 您好再次

更新必須XSLT 1.0

+0

有沒有「強有力的標籤」沒有標記(單元或其它節點除了名爲'text'元素的單個文本子節點。因此,這個問題與XPath或XSLT無關,需要重新解析被破壞的標記,然後才能使用XPath(在XSLT內部或外部)。 –

回答

0

既然你已經更新了說你只能使用XSLT 1 - 看到這個職位:How to use XSLT 1.0 or XPath to manipulate an HTML string

這是一個有點複雜,但:

要代替<,>和&您必須將其清潔三次...

這裏有一些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> 
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); 
    }