2015-08-13 3 views
0

У меня есть xml-фрагмент в xml-файле. Фрагмент имеет теги с пространством имен.Прочитать фрагмент XElement из xml-файла в элемент XElement

Как я могу прочитать этот фрагмент xml, который представляет собой элемент XElement?

<node id="n0::n0"> 
    <data key="d6"> 
    <y:ShapeNode> 
     <y:Geometry height="91.44" width="59.49119999999999" x="364.256180835285" y="-698.4404365079365"/> 
     <y:Fill color="#FFCC00" transparent="false"/> 
     <y:BorderStyle color="#000000" type="line" width="1.0"/> 
     <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="48.677734375" x="5.406732812499968" y="4.0">MELEIN</y:NodeLabel> 
     <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="27.35546875" x="16.067865624999968" y="20.843814062500087">8,00<y:LabelModel> 
      <y:SmartNodeLabelModel distance="4.0"/> 
     </y:LabelModel> 
     <y:ModelParameter> 
      <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="-0.5" nodeRatioX="0.0" nodeRatioY="-0.2720492775317138" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/> 
     </y:ModelParameter> 
     </y:NodeLabel> 
     <y:Shape type="rectangle"/> 
    </y:ShapeNode> 
    </data> 
</node> 

Я пробовал много разных способов, последний почти доходит до цели

 var mngr = new System.Xml.XmlNamespaceManager(new System.Xml.NameTable()); 
    mngr.AddNamespace(string.Empty, "urn: ignore"); // or proper URL 
    mngr.AddNamespace("y", "urn:ignore"); // or proper URL 
    var parserContext = new System.Xml.XmlParserContext(null, mngr, null, System.Xml.XmlSpace.None, null); 

    var txtReader = new System.Xml.XmlTextReader("block.graphml", System.Xml.XmlNodeType.Element, parserContext); 
    var ele = XElement.Load(txtReader); 

, но он выходит из строя в последней строке с System.InvalidOperationException

Есть ли простой способ импорта XML фрагмент к существующему xelement? Я бы предпочел способ XElement.load("block.graphml"); Это не сработало.

Спасибо за ваши советы

+1

Вы близки, но ваш 'XmlTextReader' ожидает, что XML-строки не путь в строку XML. –

+0

Спасибо, ваш намек решил мою проблему – gequest

ответ

0

Вы можете сделать это, как этот

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 
using System.Xml; 
using System.Xml.Linq; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     const string FILENAME = @"c:\temp\test.txt"; 
     static void Main(string[] args) 
     { 
      string input = File.ReadAllText(FILENAME); 
      XElement element = XElement.Parse("<Root xmlns:y=\"www.mynamespace.com\"></Root>"); 

      element.Add(input); 

     } 

    } 
} 
​ 
+0

Вы пробовали это? Все это будет добавлением загрузки текста внутри 'Root'. Вы получите что-то вроде ' < node id =" n0 :: n0 "> ...'. –

+0

Нет, я не пробовал, я использую теперь средство для очистки потока, чтобы получить текст, тогда он работал. Но ваш путь кажется намного короче. Когда я прочитаю в своем следующем фрагменте xml, я попробую. – gequest

Смежные вопросы