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

发布于 2024-11-07 11:43:07 字数 1231 浏览 5 评论 0原文

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

I have next 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>

And I want to use an XPath:

/mailAndMessageSettings/mail/body

However when I use it, it is selecting everything from the first body tag (correct) to the body tag inside the html rather than the body tag in the XML document...

How can I select all of the CDATA inside the body XML without the CDATA tag included?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

请持续率性 2024-11-14 11:43:07

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

You need to get CDATA node, load it to separate XmlDocument, and call XPath query again.

倒带 2024-11-14 11:43:07

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

/mailAndMessageSettings/mail/bodyHtml

So actually I just changed the outer body tag to bodyHtml tag instead.... and then use:

/mailAndMessageSettings/mail/bodyHtml
浸婚纱 2024-11-14 11:43:07

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

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

The parser is only going to make the CDATA accessible as text, because that's what it's used for.

If you aren't validating this, and you don't appear to be declaring it as HTML (which would restrict the presence of double body tags), I'm not sure why you need the CDATA declaration. If it's because it's dynamically generated, and you're not sure what might be generated in the strings, you should be wrapping the text in the dynamically generated html in CDATA instead.

扎心 2024-11-14 11:43:07

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

Use /mailAndMessageSettings/mail/body/text().

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文