【问题标题】:why XMLDocument AppendChild() adds "amp" to a xml node string value?为什么 XMLDocument AppendChild() 将“amp”添加到 xml 节点字符串值?
【发布时间】:2011-01-13 10:36:19
【问题描述】:

我有一个要插入到 XMLDocument - XmlElement 节点的 URL 字符串:

“http://xx.xxx.xxx.xx4:7000/SomeURL/Some/?Locale=asaf&;Portal=how”

当写这段代码时:

XmlElement NodeElement = xmlDoc.CreateElement(nodeToCreate);
NodeElement.InnerText = propInfo.GetValue(requestData,null).ToString();
additionalParamsNode.AppendChild(NodeElement);

“NodeElement.InnerText”中的文本看起来不错,但是当我执行 appendChild() 一个“&amp”写在 XMLElement additionalParamsNode 中。 它就像 XMLElement 需要 InnerXML ,而不是 NodeElement 的 InnerText。

我不想将带有“amp”的字符串写入 XML,因为链接不起作用。

如何在不将“&”更改为“&amp”的情况下附加Child?

【问题讨论】:

    标签: c# .net xmldocument ampersand appendchild


    【解决方案1】:

    如果我没记错的话,& 是 XML 中的非法字符之一。这就是为什么它变成了 &amp(与 & 的 html 等价物)。

    您应该能够将数据包装在 CDATA 标记中。

    <![CDATA[http://xx.xxx.xxx.xx4:7000/SomeURL/Some/?Locale=asaf&;Portal=how]]>
    

    完成后您可能必须解析出 CDATA 标记。

    【讨论】:

    • 它没有帮助,我这样做:NodeElement.InnerText = "![CDATA[" + propInfo.GetValue(requestData,null).ToString() + "]]";我仍然进入innerXML &amp 而不是&。
    • 标签周围必须有开始 。 NodeElement.InnerText = "";
    • 并且可能设置 InnerXml 属性而不是 InnerText,以成功添加 CDATA 部分而不是纯转义文本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-26
    相关资源
    最近更新 更多