2016-12-29 51 views
0

分割大型XML文件时出现问题。当我产生新的元素(从原来的文件复制)在新的,小的文件中插入,它们都与<at:XElement生成以“<at:”开头的名称

因此,例如开始,我的根元素看起来是这样的:<at:export

的这个代替:<export

它们与Unix LF具有相同的编码(UTF-8)。

任何人知道为什么?

编辑: 在我的分裂功能的代码源XML的

public List<XDocument> SplitXML(string sourceFile, string chunkNode, int chunkSize) 
    { 
     var smallXMLs = new List<XDocument>(); 

     Console.WriteLine("Start reading XML document..."); 
     XDocument document = XDocument.Load(sourceFile); 

     XElement content = (XElement)document.Root.LastNode; 


     Console.WriteLine("Generating chunk docs..."); 
     var ids = content.Elements(); 
     XDocument newRequest = null; 
     XElement root = null; 
     XElement items = null; 
     int i = 1; 
     do 
     { 
      root = new XElement(document.Root.Name, document.Root.Attributes()); 
      items = new XElement(chunkNode); 
      foreach (XElement myElement in document.Root.Nodes()) 
      { 
       if (myElement.Name.LocalName != chunkNode) 
        root.Add(myElement); 

      } 
      newRequest = new XDocument(); 
      newRequest.Add(root); 

      var chunk = ids.Take(chunkSize); 
      items.Add(chunk); 
      newRequest.Root.Add(items); 
      chunk.Remove(); 
      smallXMLs.Add(newRequest); 

      i++; 
     } while (ids.Any()); 

     Console.WriteLine("Document {0} generated", i.ToString()); 

     return smallXMLs; 
    } 

部分:

<?xml version='1.0' encoding='UTF-8'?> 
<export xsi:schemaLocation="http://www.arcticgroup.se/tariff/arctictariff/export Measure.xsd " 
      xmlns="http://www.arcticgroup.se/tariff/arctictariff/export" 
      xmlns:at="http://www.arcticgroup.se/tariff/arctictariff/export" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <id>98f8050f-97fb-4c73-bf89-2a332ccc0715</id> 
    <exportType>MeasureObject</exportType> 
    <parameters> 
     <queryDateStart>2005-01-01</queryDateStart> 
     <queryDateEnd>2020-01-01</queryDateEnd> 
    </parameters> 
    <items> 
     <measure at:geographicalAreaId="GCCG" at:goodsNomenclatureCode="1209220000" at:SIDGoodsNomenclature="32175" at:measureType="SEVAX" at:national="1" at:regulationId="1VAXTSKY" at:regulationRoleType="1" at:SID="-31825" at:SIDGeographicalArea="-10006" at:dateStart="2016-08-21" at:stoppedFlag="0" at:changeType="U"> 
      <measureCondition at:actionCode="01" at:certificateCode="006" at:certificateType="9" at:conditionCodeId="B" at:expression="[0.0,AMOUNT(0.0,&quot;SEK&quot;),TX]" at:national="1" at:sequenceNumber="001" at:SID="-17892"> 
      </measureCondition> 
      <measureCondition at:actionCode="01" at:conditionCodeId="B" at:expression="$Base1 = ?KGM; $Rate = AMOUNT(0.09,&quot;SEK&quot;); $CalculatedResult = $Base1 * $Rate; $BaseLow = AMOUNT(1200.0,&quot;SEK&quot;); AMAX([$BaseLow, 1.0,VA],[$CalculatedResult, 1.0,VA])" at:national="1" at:sequenceNumber="002" at:SID="-17893"> 
      </measureCondition> 
      <measureFootnoteAssociation at:footnoteId="030" at:footnoteType="02" at:national="1"/> 
      <measureFootnoteAssociation at:footnoteId="018" at:footnoteType="02" at:national="1"/> 
     </measure> 
    </items> 
</export> 

输出XML的部分:

<?xml version="1.0" encoding="utf-8"?> 
<at:export xsi:schemaLocation="http://www.arcticgroup.se/tariff/arctictariff/export Measure.xsd " xmlns="http://www.arcticgroup.se/tariff/arctictariff/export" xmlns:at="http://www.arcticgroup.se/tariff/arctictariff/export" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <at:id>98f8050f-97fb-4c73-bf89-2a332ccc0715</at:id> 
    <at:exportType>MeasureObject</at:exportType> 
    <at:parameters> 
    <at:queryDateStart>2005-01-01</at:queryDateStart> 
    <at:queryDateEnd>2020-01-01</at:queryDateEnd> 
    </at:parameters> 
    <items xmlns=""> 
    <at:measure at:geographicalAreaId="GCCG" at:goodsNomenclatureCode="1209220000" at:SIDGoodsNomenclature="32175" at:measureType="SEVAX" at:national="1" at:regulationId="1VAXTSKY" at:regulationRoleType="1" at:SID="-31825" at:SIDGeographicalArea="-10006" at:dateStart="2016-08-21" at:stoppedFlag="0" at:changeType="U"> 
     <at:measureCondition at:actionCode="01" at:certificateCode="006" at:certificateType="9" at:conditionCodeId="B" at:expression="[0.0,AMOUNT(0.0,&quot;SEK&quot;),TX]" at:national="1" at:sequenceNumber="001" at:SID="-17892"></at:measureCondition> 
     <at:measureCondition at:actionCode="01" at:conditionCodeId="B" at:expression="$Base1 = ?KGM; $Rate = AMOUNT(0.09,&quot;SEK&quot;); $CalculatedResult = $Base1 * $Rate; $BaseLow = AMOUNT(1200.0,&quot;SEK&quot;); AMAX([$BaseLow, 1.0,VA],[$CalculatedResult, 1.0,VA])" at:national="1" at:sequenceNumber="002" at:SID="-17893"></at:measureCondition> 
     <at:measureFootnoteAssociation at:footnoteId="030" at:footnoteType="02" at:national="1" /> 
     <at:measureFootnoteAssociation at:footnoteId="018" at:footnoteType="02" at:national="1" /> 
    </at:measure> 
    </items> 
</at:export> 
+3

看起来像一个命名空间,但我们只能告诉你是否有一个输入文件,代码和当前结果的小例子。请参阅[MCVE]以获得指导 – rene

+0

自从我使用这些类以来已经有一段时间了,但它可能是一个命名空间问题? –

+0

原始文档很可能有一个_namespace_,如果您不需要它在输出文档中,您必须将其删除。请显示生成输出的原始输入文档和代码的一部分。 –

回答

0

我通常请遵循以避免命名空间问题:

  string xml = 
       "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" + 
       "<export xsi:schemaLocation=\"http://www.arcticgroup.se/tariff/arctictariff/export Measure.xsd \"" + 
       " xmlns=\"http://www.arcticgroup.se/tariff/arctictariff/export\"" + 
       " xmlns:at=\"http://www.arcticgroup.se/tariff/arctictariff/export\"" + 
       " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">" + 
       "</export>"; 

      XDocument newRequest = XDocument.Parse(xml);