如何使用Xpath访问此xml节点中的数据(CDATA)?

时间:2011-05-12 14:51:49

标签: xml xpath cdata

我有下一个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

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

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

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

所以实际上我只是将外部主体标签更改为bodyHtml标签而不是....然后使用:

/mailAndMessageSettings/mail/bodyHtml

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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