gpt4 book ai didi

c# - 合并 xml 命名空间

转载 作者:行者123 更新时间:2023-12-04 17:00:49 25 4
gpt4 key购买 nike

我有以下 xml。

命名空间非常分散,但 xml 本身是有效的。有什么方法可以配置编写器以在顶部输出所有相关命名空间和 xml 清洁器的 xml?我的 xml 阅读器/编写器组合似乎忠实地再现了这一点。我宁愿合并所有的命名空间。

如果可能的话,我真的不想不使用 xslt。

<feed xmlns="http://www.w3.org/2005/Atom" xmlns:a="http://www.w3.org/2005/Atom/extensions/property" a:length="1">
<title type="text">Search Results: '80706'</title>
<subtitle type="text">search results</subtitle>
<id>80706</id>
<updated>2011-08-30T09:05:21+02:00</updated>
<author>
<name>XXXXXX</name>
<uri>contact@xxxx</uri>
<email>contact@xxxx.com</email>
</author>
<entry">
<id>8000</id>
<title type="text">Investment 0000000</title>
<summary type="text">pre populated form</summary>
<published>2011-08-30T14:57:45Z</published>
<updated>2011-08-30T09:05:21+02:00</updated>
<content type="application/xml">
<prop:query-result xmlns:prop="http://www.w3.org/2005/Atom/extensions/property" xmlns="http://www.w3.org/2005/Atom/extensions/property">
<prop:PartyId>000000</prop:PartyId>
<prop:IDReferenceNumber>000000</prop:IDReferenceNumber>
<prop:FullName></prop:FullName>
<prop:FirstName>FIRST</prop:FirstName>
<prop:LastName>LAST</prop:LastName>
<prop:Title>Mr</prop:Title>
<prop:BirthDate>1967-05-24T00:00:00</prop:BirthDate>
<prop:PartySystemKey source="Number">000000</prop:PartySystemKey>
<prop:Address type="Mailing">BOX ...</prop:Address>
<prop:Address type="Home">39 ...</prop:Address>
<prop:ContactNumber>0000000</prop:ContactNumber>
<prop:InvestmentNumber source="ContractNumber">0000000</prop:InvestmentNumber>
<prop:InvestmentNumber source="AccountNumber">0000000</prop:InvestmentNumber>
</prop:query-result>
</content>
</entry>
</feed>

最佳答案

好吧,XmlReader 只能向前工作,因此使用 XmlReader/Writer 组合在任何地方找到使用过的命名空间以将它们放在根目录中有点困难。
但是,当我运行代码 (.NET 4.0) 时,您可以尝试 LINQ to XML

    XDocument feed = XDocument.Load(@"input.xml");
feed.Root.Descendants().Attributes().Where(a => a.IsNamespaceDeclaration && feed.Root.Attributes().Any(a2 => a.Value == a2.Value)).Remove();
feed.Save(Console.Out, SaveOptions.OmitDuplicateNamespaces);

针对样本输入
<?xml version="1.0" encoding="utf-8" ?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:a="http://www.w3.org/2005/Atom/extensions/property" a:length="1">
<title type="text">Search Results: '80706'</title>
<subtitle type="text">search results</subtitle>
<id>80706</id>
<updated>2011-08-30T09:05:21+02:00</updated>
<author>
<name>XXXXXX</name>
<uri>contact@xxxx</uri>
<email>contact@xxxx.com</email>
</author>
<entry>
<id>8000</id>
<title type="text">Investment 0000000</title>
<summary type="text">pre populated form</summary>
<published>2011-08-30T14:57:45Z</published>
<updated>2011-08-30T09:05:21+02:00</updated>
<content type="application/xml">
<prop:query-result xmlns:prop="http://www.w3.org/2005/Atom/extensions/property" xmlns="http://www.w3.org/2005/Atom/extensions/property">
<prop:PartyId>000000</prop:PartyId>
<prop:IDReferenceNumber>000000</prop:IDReferenceNumber>
<prop:FullName></prop:FullName>
<prop:FirstName>FIRST</prop:FirstName>
<prop:LastName>LAST</prop:LastName>
<prop:Title>Mr</prop:Title>
<prop:BirthDate>1967-05-24T00:00:00</prop:BirthDate>
<prop:PartySystemKey source="Number">000000</prop:PartySystemKey>
<prop:Address type="Mailing">BOX ...</prop:Address>
<prop:Address type="Home">39 ...</prop:Address>
<prop:ContactNumber>0000000</prop:ContactNumber>
<prop:InvestmentNumber source="ContractNumber">0000000</prop:InvestmentNumber>
<prop:InvestmentNumber source="AccountNumber">0000000</prop:InvestmentNumber>
</prop:query-result>
</content>
</entry>
</feed>

我得到输出
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:a="http://www.w3.org/2005/Atom/extensions/property" a:length="1">
<title type="text">Search Results: '80706'</title>
<subtitle type="text">search results</subtitle>
<id>80706</id>
<updated>2011-08-30T09:05:21+02:00</updated>
<author>
<name>XXXXXX</name>
<uri>contact@xxxx</uri>
<email>contact@xxxx.com</email>
</author>
<entry>
<id>8000</id>
<title type="text">Investment 0000000</title>
<summary type="text">pre populated form</summary>
<published>2011-08-30T14:57:45Z</published>
<updated>2011-08-30T09:05:21+02:00</updated>
<content type="application/xml">
<a:query-result>
<a:PartyId>000000</a:PartyId>
<a:IDReferenceNumber>000000</a:IDReferenceNumber>
<a:FullName></a:FullName>
<a:FirstName>FIRST</a:FirstName>
<a:LastName>LAST</a:LastName>
<a:Title>Mr</a:Title>
<a:BirthDate>1967-05-24T00:00:00</a:BirthDate>
<a:PartySystemKey source="Number">000000</a:PartySystemKey>
<a:Address type="Mailing">BOX ...</a:Address>
<a:Address type="Home">39 ...</a:Address>
<a:ContactNumber>0000000</a:ContactNumber>
<a:InvestmentNumber source="ContractNumber">0000000</a:InvestmentNumber>

<a:InvestmentNumber source="AccountNumber">0000000</a:InvestmentNumber>
</a:query-result>
</content>
</entry>
</feed>

这样就够了吗?你还没有说你想要什么样的结果,以及是否有输入变体在某些级别使用命名空间,这些级别之前没有声明需要提升。对于您当前的示例,只需删除重复的命名空间声明就足够了。

关于c# - 合并 xml 命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7243627/

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