首页 文章

方括号之间的C#Regex for XML-Sequence

提问于
浏览
0

我为找到合适的RegEx而苦苦挣扎 . 我需要匹配一个字符串中的RegEx,如下所示:

//XML-Syntax before
<![CDATA[
//a lot of XSL-Syntax between including '[' and ']' chars
]]>
//XML-Syntax after

现在我需要获得我无法工作的XSL语法 . 特别是内部的方括号以及限制琴弦给我带来了困难 . 有人知道这个优雅的解决方案吗?

最好的祝福

1 回答

  • 2

    CDATA部分是XML中的语法糖,以避免转义嵌入式标记 . 如果您有一个元素并且需要其字符串内容,无论它是在普通文本节点还是在CDATA节节点中,您只需访问.NET框架的DOM实现( System.Xml.XmlDocument )中元素的 InnerText 即可 . 如果您确实需要解决CDATA部分本身,那么您可以将其作为元素节点的子节点进行访问,并读出其 Value 属性 . 所以下面的C#片段

    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 .

相关问题