N
niberhate
I thought this was an easy problem, but have had a hard time figuring
out how to achieve this. For example, I have the following simple
piece of XML. I'd like to process this XML and basically remove all
<SomeGrouping> and </SomeGrouping> from it and return an XML shown
below the input XML. I know I can easily achieve this through Regex
or string replacement, but have been wondering if there is any XML API
that would let me do this.
I came up with the following method by studying the XPath examples
given at MSDN, but it doesn't work as expected.
public static IEnumerable<XElement> XlinqXpathTest()
{
var xmlReader = XmlReader.Create(new
StreamReader("TheXmlFile.xml"));
var root = XElement.Load(xmlReader);
var elements = root.XPathSelectElements(".//MyElement");
return elements;
}
Any suggestion? Thanks.
<!-- The input XML -->
<MyElement Url="some/folder/index.html">
<SomeGrouping>
<MyElement Url="some/other/folder/page1.html" />
<MyElement Url="some/other/folder/page2.html" />
<MyElement Url="some/other/folder/page3.html" />
<MyElement Url="some/other/folder/page4.html" />
<MyElement Url="some/other/folder/page5.html" >
<SomeGrouping>
<MyElement Url="yet/some/other/folder/page6.html" />
</SomeGrouping>
</MyElement>
<MyElement Url="other/folder/page1.html">
<SomeGrouping>
<MyElement Url="other/folder/folder1/page1.html" />
<MyElement Url="other/folder/folder1/page2.html" />
<MyElement Url="other/folder/folder1/page3.html" />
<MyElement Url="other/folder/folder1/page4.html" />
<MyElement Url="other/folder/folder1/page5.html" />
</SomeGrouping>
</MyElement>
<MyElement Url="other/folder1/page1.html" />
<MyElement Url="other/folder1/page2.html" />
<MyElement Url="other/folder1/page3.html" />
<MyElement Url="other/folder1/page4.html" />
<MyElement Url="other/folder1/page5.html" />
</SomeGrouping>
</MyElement>
<!-- Below is the output I want -->
<MyElement Url="some/folder/index.html">
<MyElement Url="some/other/folder/page1.html" />
<MyElement Url="some/other/folder/page2.html" />
<MyElement Url="some/other/folder/page3.html" />
<MyElement Url="some/other/folder/page4.html" />
<MyElement Url="some/other/folder/page5.html" >
<MyElement Url="yet/some/other/folder/page6.html" />
</MyElement>
<MyElement Url="other/folder/page1.html">
<MyElement Url="other/folder/folder1/page1.html" />
<MyElement Url="other/folder/folder1/page2.html" />
<MyElement Url="other/folder/folder1/page3.html" />
<MyElement Url="other/folder/folder1/page4.html" />
<MyElement Url="other/folder/folder1/page5.html" />
</MyElement>
<MyElement Url="other/folder1/page1.html" />
<MyElement Url="other/folder1/page2.html" />
<MyElement Url="other/folder1/page3.html" />
<MyElement Url="other/folder1/page4.html" />
<MyElement Url="other/folder1/page5.html" />
</MyElement>
out how to achieve this. For example, I have the following simple
piece of XML. I'd like to process this XML and basically remove all
<SomeGrouping> and </SomeGrouping> from it and return an XML shown
below the input XML. I know I can easily achieve this through Regex
or string replacement, but have been wondering if there is any XML API
that would let me do this.
I came up with the following method by studying the XPath examples
given at MSDN, but it doesn't work as expected.
public static IEnumerable<XElement> XlinqXpathTest()
{
var xmlReader = XmlReader.Create(new
StreamReader("TheXmlFile.xml"));
var root = XElement.Load(xmlReader);
var elements = root.XPathSelectElements(".//MyElement");
return elements;
}
Any suggestion? Thanks.
<!-- The input XML -->
<MyElement Url="some/folder/index.html">
<SomeGrouping>
<MyElement Url="some/other/folder/page1.html" />
<MyElement Url="some/other/folder/page2.html" />
<MyElement Url="some/other/folder/page3.html" />
<MyElement Url="some/other/folder/page4.html" />
<MyElement Url="some/other/folder/page5.html" >
<SomeGrouping>
<MyElement Url="yet/some/other/folder/page6.html" />
</SomeGrouping>
</MyElement>
<MyElement Url="other/folder/page1.html">
<SomeGrouping>
<MyElement Url="other/folder/folder1/page1.html" />
<MyElement Url="other/folder/folder1/page2.html" />
<MyElement Url="other/folder/folder1/page3.html" />
<MyElement Url="other/folder/folder1/page4.html" />
<MyElement Url="other/folder/folder1/page5.html" />
</SomeGrouping>
</MyElement>
<MyElement Url="other/folder1/page1.html" />
<MyElement Url="other/folder1/page2.html" />
<MyElement Url="other/folder1/page3.html" />
<MyElement Url="other/folder1/page4.html" />
<MyElement Url="other/folder1/page5.html" />
</SomeGrouping>
</MyElement>
<!-- Below is the output I want -->
<MyElement Url="some/folder/index.html">
<MyElement Url="some/other/folder/page1.html" />
<MyElement Url="some/other/folder/page2.html" />
<MyElement Url="some/other/folder/page3.html" />
<MyElement Url="some/other/folder/page4.html" />
<MyElement Url="some/other/folder/page5.html" >
<MyElement Url="yet/some/other/folder/page6.html" />
</MyElement>
<MyElement Url="other/folder/page1.html">
<MyElement Url="other/folder/folder1/page1.html" />
<MyElement Url="other/folder/folder1/page2.html" />
<MyElement Url="other/folder/folder1/page3.html" />
<MyElement Url="other/folder/folder1/page4.html" />
<MyElement Url="other/folder/folder1/page5.html" />
</MyElement>
<MyElement Url="other/folder1/page1.html" />
<MyElement Url="other/folder1/page2.html" />
<MyElement Url="other/folder1/page3.html" />
<MyElement Url="other/folder1/page4.html" />
<MyElement Url="other/folder1/page5.html" />
</MyElement>