【问题标题】:How can I access the data (CDATA) in this xml node with Xpath?如何使用 Xpath 访问此 xml 节点中的数据 (CDATA)?
【发布时间】:2011-08-24 04:58:08
【问题描述】:

我有下一个 XML:

<?xml version="1.0" encoding="UTF-8"?>
<mailAndMessageSettings>
    <settings>
        <add key="Url" value=""/>
        <add key="UserName" value=""/>
        <add key="Password" value=""/>
    </settings>
    <mail>
        <subject>      
            Mp3 Submission
        </subject>
        <body>
            <![CDATA[
                <meta http-equiv="Content-Type" content="text/html; charset="utf-8""/>
                <head></head>

                <body>
                <p>Hi,</p>

                <p>Please find the attached mp3</p>

                <p><a href="mymp3.mp33">here</a></p>

                <p>Regards,</br>
                Pete</p>

                </body>
                </html> 
            ]]>
        </body>
    </mail>    
</mailAndMessageSettings>

我想使用 XPath:

/mailAndMessageSettings/mail/body

但是,当我使用它时,它会选择从第一个正文标记(正确)到 html 内的正文标记的所有内容,而不是 XML 文档中的正文标记...

如何在不包含 CDATA 标记的情况下选择正文 XML 中的所有 CDATA?

【问题讨论】:

    标签: xml xpath cdata


    【解决方案1】:

    需要获取CDATA节点,加载到单独的XmlDocument中,再次调用XPath查询。

    【讨论】:

      【解决方案2】:

      所以实际上我只是将外部body标签改为bodyHtml标签......然后使用:

      /mailAndMessageSettings/mail/bodyHtml
      

      【讨论】:

        【解决方案3】:

        解析器只会让 CDATA 可以作为文本访问,因为这就是它的用途。

        如果您没有对此进行验证,并且您似乎没有将其声明为 HTML(这将限制双体标签的存在),我不确定您为什么需要 CDATA 声明。如果是因为它是动态生成的,并且您不确定字符串中可能会生成什么,则应该将文本包装在 CDATA 中动态生成的 html 中。

        【讨论】:

          【解决方案4】:

          使用/mailAndMessageSettings/mail/body/text()

          【讨论】:

            猜你喜欢
            • 2012-08-22
            • 2020-11-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-12-20
            • 2011-02-27
            • 1970-01-01
            相关资源
            最近更新 更多