gpt4 book ai didi

c# - 在 C# 中,有没有一种方法可以使用短前缀而不是每个节点的完整命名空间来生成 XDocument?

转载 作者:数据小太阳 更新时间:2023-10-29 01:47:16 26 4
gpt4 key购买 nike

我只是想让我的 XML 更整洁一点,体积更小。我知道在 C# 中可以做这样的事情:

XNamespace ds = "http://schemas.microsoft.com/ado/2007/08/dataservices";
new XElement(ds + "MyDumbElementName", "SomethingStupid");

并获得与此类似的 XML:

<root>
<MyDumbElementName xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices">
SomethingStupid
</MyDumbElementName>
</root>

而不是这样的:

<root xmlns:ds="http://schemas.microsoft.com/ado/2007/08/dataservices">
<ds:MyDumbElementName>
SomethingStupid
</ds:MyDumbElementName>
</root>

显然,第二个版本更漂亮、更易于阅读且紧凑。有什么方法可以在不调用 Parse("...") 的情况下生成与紧凑版本等效的 XDocument?

您可能决定冒险并回答“否”,在这种情况下,我认为公平的做法是等待其他人回答,如果没有人给出合适的答案,我会接受您的“否” ”,否则如果有人确实提供了答案,我将标记“否”。我希望这对你也公平。

编辑:也许我应该更具体一点,说我希望能够使用多个 namespace ,而不仅仅是一个。

最佳答案

您可以通过指定 xmlns 属性显式覆盖此行为:

XNamespace ns = "urn:test";

new XDocument (
new XElement ("root",
new XAttribute (XNamespace.Xmlns + "ds", ns),
new XElement (ns + "foo",
new XAttribute ("xmlns", ns),
new XElement (ns + "bar", "content")
))
).Dump ();

<root xmlns:ds="urn:test">
<foo xmlns="urn:test">
<bar>content</bar>
</foo>
</root>

默认情况下,行为是内联指定 xmlns。

XNamespace ns = "urn:test";

new XDocument (
new XElement ("root",
new XElement (ns + "foo",
new XElement (ns + "bar", "content")
))
).Dump ();

给出输出:

<root>
<foo xmlns="urn:test">
<bar>content</bar>
</foo>
</root>

所以默认行为是你想要的行为,除非命名空间已经定义:

XNamespace ns = "urn:test";

new XDocument (
new XElement ("root",
new XAttribute (XNamespace.Xmlns + "ds", ns),
new XElement (ns + "foo",
new XElement (ns + "bar", "content")
))
).Dump ();

<root xmlns:ds="urn:test">
<ds:foo>
<ds:bar>content</ds:bar>
</ds:foo>
</root>

关于c# - 在 C# 中,有没有一种方法可以使用短前缀而不是每个节点的完整命名空间来生成 XDocument?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6747304/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com