C# Linq to XML - 将命名空间保留在父节点中,同时从子节点中删除它们

问题描述 投票:0回答:1

所以我通过 LINQ to XML 创建了这个 XML 树,如下所示:

   XNamespace xNamespace = "urn:OECD:StandardAuditFile-Tax:PT_";
   XElement main =
    new XElement(xNamespace + "AuditFile",
    new XAttribute("xmlns", "urn:OECD:StandardAuditFile-Tax:PT_"),
    new XAttribute(XNamespace.Xmlns + "xsi", "http://www.w3.org/2001/XMLSchema-instance"),
    new XElement(xNamespace + "Header",
          new XAttribute("xmlns", "urn:OECD:StandardAuditFile-Tax:PT_"),
          new XElement("AuditFileVersion", "filler"),
          new XElement("CompanyID", "filler"),
          new XElement("TaxRegistrationNumber", "filler"),
          new XElement("TaxAccountingBasis", "filler"),
          new XElement("CompanyName", "filler"),
          new XElement("BusinessName", "filler"),
          new XElement("CompanyAddress",
             new XElement("AddressDetail", "filler"),
             new XElement("City", "filler"),
             new XElement("PostalCode", "filler"),
             new XElement("Region", "filler"),
             new XElement("Country", "filler")
         ),
         new XElement("FiscalYear", "filler"),
         new XElement("StartDate", "filler"),
         new XElement("EndDate", "filler"),
         new XElement("CurrencyCode", "filler"),
         new XElement("DateCreated", "filler"),
         new XElement("TaxEntity", "filler"),
         new XElement("ProductCompanyTaxID", "filler"),
         new XElement("SoftwareCertificateNumber", "filler"),
         new XElement("ProductID", "filler"),
         new XElement("ProductVersion", "filler"),
         new XElement("Telephone", "filler"),
         new XElement("Fax", "filler"),
         new XElement("Email", "filler")
     ));

这些内容只是填充物,因为它们最初显示的敏感信息对于本主题来说并不重要。如您所见,我将命名空间添加到根节点 AuditFile 和节点 Header 中。 xml 文件如下所示:

<AuditFile xmlns="urn:OECD:StandardAuditFile-Tax:PT_1_04_01" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <Header xmlns="urn:OECD:StandardAuditFile-Tax:PT_1_04_01">
     <AuditFileVersion xmlns="">filler</AuditFileVersion>
     <CompanyID xmlns="">filler</CompanyID>
     <TaxRegistrationNumber xmlns="">filler</TaxRegistrationNumber>
     <TaxAccountingBasis xmlns="">filler</TaxAccountingBasis>
     <CompanyName xmlns="">filler</CompanyName>
     <BusinessName xmlns="">filler</BusinessName>
     <CompanyAddress xmlns="">
         <AddressDetail>filler</AddressDetail>
         <City>filler</City>
         <PostalCode>filler</PostalCode>
         <Region>filler</Region>
        <Country>filler</Country>
     </CompanyAddress>
     <FiscalYear xmlns="">filler</FiscalYear>
     <StartDate xmlns="">filler</StartDate>
     <EndDate xmlns="">filler</EndDate>
     <CurrencyCode xmlns="">filler</CurrencyCode>
     <DateCreated xmlns="">filler</DateCreated>
     <TaxEntity xmlns="">filler</TaxEntity>
     <ProductCompanyTaxID xmlns="">filler</ProductCompanyTaxID>
     <SoftwareCertificateNumber xmlns="">filler</SoftwareCertificateNumber>
     <ProductID xmlns="">filler</ProductID>
     <ProductVersion xmlns="">filler</ProductVersion>
     <Telephone xmlns="">filler</Telephone>
     <Fax xmlns="">filler</Fax>
     <Email xmlns="">filler</Email>
  </Header>
</AuditFile>

所有其他节点也有 xmlns 标签,我想删除它,同时保留 AuditFile 和 Header 节点的命名空间,这可能吗?

c# xml linq-to-xml xml-namespaces
1个回答
0
投票

基本上,听起来您希望 all 元素位于同一名称空间中 - 这是通过

xmlns
从父级继承的。因此,您需要指定所有元素的命名空间,例如

XNamespace xNamespace = "urn:OECD:StandardAuditFile-Tax:PT_";
XElement main =
    new XElement(xNamespace + "AuditFile",
    new XAttribute("xmlns", "urn:OECD:StandardAuditFile-Tax:PT_"),
    new XAttribute(XNamespace.Xmlns + "xsi", "http://www.w3.org/2001/XMLSchema-instance"),
    new XElement(xNamespace + "Header",
          new XAttribute("xmlns", "urn:OECD:StandardAuditFile-Tax:PT_"),
          new XElement(xNamespace + "AuditFileVersion", "filler"),
          new XElement(xNamespace + "CompanyID", "filler"),
          new XElement(xNamespace + "TaxRegistrationNumber", "filler"),
          new XElement(xNamespace +"TaxAccountingBasis", "filler"),
          new XElement(xNamespace +"CompanyName", "filler"),
          ...

这样,您就不会在

xmlns=""
等中得到
AuditFileVersion
,因为它将位于基于父元素的“正确”命名空间中。

© www.soinside.com 2019 - 2024. All rights reserved.