2009-06-11 13 views
0

Ist es möglich, einen Knoten mit einem XPathNodeIterator auswählen und erhalten Sie die äußere oder InnereXML ohne Einzug?Wählen Sie einen Knoten mit XPathNodeIterator ohne Einzüge xml

Da die Ergebnisse in der XHTML-Ausgabe verwendet werden, führt die Einrückung (mit Leerzeichen) zu Layoutunterschieden.

Beispielcode-Schnipsel:

xmlDoc = New XPathDocument(fileIn, xmlSpace.Preserve) 
xmlNav = xmlDoc.CreateNavigator() 
Dim xmlNode As XPathNodeIterator 

xmlNode = xmlNav.Select("/books/chapter[page[@process='True']]") 
    While xmlNode.MoveNext() 

     content = xmlNode.Current.selectSingleNode("para").OuterXML) 
etc. 

In diesem Fall habe ich das folgende Ergebnis erhalten würde (beachten Sie, dass das Originaldokument (FileIn) keine identation hat und XML ist alles, was man nur eine einzige Zeile:

<para process="True"> 
    <a href="#1109062"> 
    <em>Some content</em> 
    </a> 
</para> 

würde Ich mag die folgende erhalten.

<para process="True"><a href="#1109062"><em>Some content</em></a></para> 
+0

Ich habe dies nur verwendet, um Einzug zu bekommen. ^^ –

Antwort

2

Reflector schlägt es keine schnelle ist Einstellung, um hier zu ändern. Dies ist die Quelle von XPathNavigator.get_OuterXml:

public virtual string get_OuterXml() 
{ 
    if (this.NodeType == XPathNodeType.Attribute) 
    { 
     return (this.Name + "=\"" + this.Value + "\""); 
    } 
    if (this.NodeType == XPathNodeType.Namespace) 
    { 
     if (this.LocalName.Length == 0) 
     { 
      return ("xmlns=\"" + this.Value + "\""); 
     } 
     return ("xmlns:" + this.LocalName + "=\"" + this.Value + "\""); 
    } 
    StringWriter output = new StringWriter(CultureInfo.InvariantCulture); 
    XmlWriterSettings settings = new XmlWriterSettings(); 
    settings.Indent = true; 
    settings.OmitXmlDeclaration = true; 
    settings.ConformanceLevel = ConformanceLevel.Auto; 
    XmlWriter writer2 = XmlWriter.Create(output, settings); 
    try 
    { 
     writer2.WriteNode(this, true); 
    } 
    finally 
    { 
     writer2.Close(); 
    } 
    return output.ToString(); 
} 

Notiere die settings.Indent = true.

Eine Idee wäre, eine Hilfsmethode zu erstellen, die tut, was dieser Code tut, aber Ihre bevorzugten Einstellungen für die XmlWriter verwenden. Rufen Sie diese Methode dann mit dem gefundenen Knoten auf, anstatt auf dessen OuterXml zuzugreifen.

+0

Danke, es hat funktioniert. Ich habe eine kleine Hilfsfunktion erstellt, die das "normale" XML basierend auf der XPathNavigator.get_OuterXml-Quelle ausgibt. – barry

Verwandte Themen