我为找到合适的RegEx而苦苦挣扎 . 我需要匹配一个字符串中的RegEx,如下所示:
//XML-Syntax before <![CDATA[ //a lot of XSL-Syntax between including '[' and ']' chars ]]> //XML-Syntax after
现在我需要获得我无法工作的XSL语法 . 特别是内部的方括号以及限制琴弦给我带来了困难 . 有人知道这个优雅的解决方案吗?
最好的祝福
CDATA部分是XML中的语法糖,以避免转义嵌入式标记 . 如果您有一个元素并且需要其字符串内容,无论它是在普通文本节点还是在CDATA节节点中,您只需访问.NET框架的DOM实现( System.Xml.XmlDocument )中元素的 InnerText 即可 . 如果您确实需要解决CDATA部分本身,那么您可以将其作为元素节点的子节点进行访问,并读出其 Value 属性 . 所以下面的C#片段
System.Xml.XmlDocument
InnerText
Value
string xml = @"<root><data><![CDATA[<xsl:stylesheet xmlns='http://www.w3.org/1999/XSL/Transform' version='1.0'><xsl:template match='/'><test/></xsl:template></xsl:stylesheet>]]></data></root>"; XmlDocument doc = new XmlDocument(); doc.LoadXml(xml); Console.WriteLine(doc.DocumentElement["data"].InnerText); Console.WriteLine(doc.DocumentElement["data"].FirstChild.Value);
输出
<xsl:stylesheet xmlns='http://www.w3.org/1999/XSL/Transform' version='1.0'><xsl:template match='/'><test/></xsl:template></xsl:stylesheet> <xsl:stylesheet xmlns='http://www.w3.org/1999/XSL/Transform' version='1.0'><xsl:template match='/'><test/></xsl:template></xsl:stylesheet>
然后,如果需要在XSLT代码中选择任何数据,则可以使用XmlDocument将该字符串再次解析为XML .
1 回答
CDATA部分是XML中的语法糖,以避免转义嵌入式标记 . 如果您有一个元素并且需要其字符串内容,无论它是在普通文本节点还是在CDATA节节点中,您只需访问.NET框架的DOM实现(
System.Xml.XmlDocument
)中元素的InnerText
即可 . 如果您确实需要解决CDATA部分本身,那么您可以将其作为元素节点的子节点进行访问,并读出其Value
属性 . 所以下面的C#片段输出
然后,如果需要在XSLT代码中选择任何数据,则可以使用XmlDocument将该字符串再次解析为XML .