如何检索特定命名空间中的元素?

时间:2014-03-12 08:52:28

标签: c# xml xpath

我使用C#。请考虑以下XML:

<item>
  <title>lorem</title>
  <description>ipsum</description>
  <media:category>Sports</media:category>
  <media:title>Combo</media:title>
  <media:thumbnail url='http://dolor/0.jpg' height='100' width='200'/>
  <media:thumbnail url='http://sit/0.jpg' height='300' width='400'/>
</item>

我希望能够检索具有命名空间的所有元素的List,例如。 media。 XML被加载到XElement。我可以通过名称找到使用Linq的元素,例如。 thumbnail,但不是命名空间。

这并不总是有效的XML,因为并不总是声明xmlns命名空间。它以这种方式加载到XElement:

XElement _root = XDocument.Parse(xmlString).Root;

1 个答案:

答案 0 :(得分:0)

您可以尝试使用此XPath表达式选择特定命名空间中的所有元素:

//*[namespace-uri()='http://uri-address-here']

例如在C#中:

var xml = @"<item xmlns:media='http://www.foo.org/'>
  <title>lorem</title>
  <description>ipsum</description>
  <media:category>Sports</media:category>
  <media:title>Combo</media:title>
  <media:thumbnail url='http://dolor/0.jpg' height='100' width='200'/>
  <media:thumbnail url='http://sit/0.jpg' height='300' width='400'/>
</item>";
var element = XElement.Parse(xml);
var elements = element.XPathSelectElements("//*[namespace-uri()='http://www.foo.org/']");