LINQ to XML XElement 节点

发布于 2024-10-15 01:37:07 字数 267 浏览 3 评论 0原文

我正在使用 LinqXML 创建 XML 文件。

string value = "Steet,<BR> </BR> City";
XElement address = new XElement("Address", value);

一旦我写入 xml 文件,地址值就会显示为 Steet,&lt;BR&gt &lt;/BR&gt 我只需要像原来一样。 (即使形状不太好)

I am creating a XML file using LinqXML.

string value = "Steet,<BR> </BR> City";
XElement address = new XElement("Address", value);

Once I write the xml file, the address value is shown as Steet,<BR> </BR>
I just need as it is like original. (Even if it does not well form)

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

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

发布评论

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

评论(3

顾挽 2024-10-22 01:37:07

如果这些内容的格式不正确,那么就不要指望能够将其视为 XML。因此,如果您想将格式不正确的 HTML 标记放入 XML 元素中,请考虑使用 CDATA 部分,例如,

    string value = "Steet,<BR> </BR> City";
    XElement address = new XElement("Address", new XCData(value));

这将导致:

<Address><![CDATA[Steet,<BR> </BR> City]]></Address>

如果您想将值解析为 XML,则使用片段模式下的 XmlReader 执行此操作,例如,

static void Main()
{
    string value = "Steet,<BR> </BR> City";
    XElement address = new XElement("Address", ParseFragment(value));
    Console.WriteLine(address);
}

static IEnumerable<XNode> ParseFragment(string fragment)
{
    using (StringReader sr = new StringReader(fragment))
    {
        using (XmlReader xr = XmlReader.Create(sr, new XmlReaderSettings() { ConformanceLevel = ConformanceLevel.Fragment }))
        {
            xr.Read();
            XNode node;
            while (!xr.EOF && (node = XNode.ReadFrom(xr)) != null)
            {
                yield return node;
            }
        }
    }
}

这将导致

<Address>Steet,<BR> </BR> City</Address>

Well if that stuff is not well-formed then don't expect to be able to treat it as XML. Thus if you want to put not well-formed HTML markup into an XML element then consider to use a CDATA section e.g.

    string value = "Steet,<BR> </BR> City";
    XElement address = new XElement("Address", new XCData(value));

which will result in

<Address><![CDATA[Steet,<BR> </BR> City]]></Address>

If you want to parse the value as XML then do so with an XmlReader in fragment mode e.g.

static void Main()
{
    string value = "Steet,<BR> </BR> City";
    XElement address = new XElement("Address", ParseFragment(value));
    Console.WriteLine(address);
}

static IEnumerable<XNode> ParseFragment(string fragment)
{
    using (StringReader sr = new StringReader(fragment))
    {
        using (XmlReader xr = XmlReader.Create(sr, new XmlReaderSettings() { ConformanceLevel = ConformanceLevel.Fragment }))
        {
            xr.Read();
            XNode node;
            while (!xr.EOF && (node = XNode.ReadFrom(xr)) != null)
            {
                yield return node;
            }
        }
    }
}

That results in

<Address>Steet,<BR> </BR> City</Address>
千と千尋 2024-10-22 01:37:07

我认为你不需要改变任何事情。 <> 是 XML 中尖括号的转义方式。当读取字符串值时,XML 解析器会自动将它们转回文字尖括号。 CDATA 只是转义尖括号的另一种方式。在这种情况下,他们都完成了完全相同的事情。如果您使用原始代码并使用 XML 解析器读取

节点的值,则返回的字符串将为 Street,

城市。更改转义为 CDATA 的方法实际上不会改变任何内容,除了使 XML(可以说)更难阅读之外。

如果您希望
标记实际上成为 XML 文档的一部分,那么您应该使其成为文档的一部分。也就是说...

new XElement("Address", "Street,", new XElement("BR"), " City")

I don't think you need to change anything. < and > are how angle brackets are escaped in XML. XML parsers turn them back into literal angle brackets automatically when reading string values. CDATA is simply another way of escaping the angle brackets. They both accomplish exactly the same thing in this case. If you take your original code and read the value of the <Address> node with an XML parser, the string returned will be Street,<BR> </BR> City. Changing the method of escaping to CDATA doesn't actually change anything except to make your XML (arguably) harder to read.

If you want the <BR /> tag to be actually part of the XML document, then you should make it part of the document. That is to say...

new XElement("Address", "Street,", new XElement("BR"), " City")
尘曦 2024-10-22 01:37:07

您需要将其包装在 CDATA 中以保存它

you need to wrap it in CDATA to preserve it

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