使用XML前缀/命名空间创建Xpath

时间:2015-11-19 16:40:37

标签: xml xpath namespaces

这是我prior question的后续内容。我想我已经深入了解所以花一些时间来完全理解XML命名空间。

this XML页面开始,重点关注以下元素:

<m:properties xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">

据我所知,m:前缀用于区分properties元素与其他文档中具有相同名称的元素,以防这些文档合并。 我理解为了使用前缀,必须定义该前缀的命名空间。这样的定义是使用XML命名空间属性(xmlns)完成的,语法是xmlns:prefix="URI"。 URI是Uniform Resource Identifier,它基本上是元素的来源。 URI曾经被称为Uniform Resource Names (URN),这基本上是相同的。

现在看看我之前的答案:

$url = "http://www.treasury.gov/resource-center/data-chart-center/interest-rates/pages/XmlView.aspx?data=yieldyear&year=2015";
$element = simplexml_load_file($url);

$element->registerXPathNamespace(
  'atom', 'http://www.w3.org/2005/Atom'
);
$element->registerXpathNamespace(
  'meta', 'http://schemas.microsoft.com/ado/2007/08/dataservice/metadata'
);

foreach ($element->xpath('//atom:entry/atom:content/meta:properties') as $properties) {
  $properties->registerXpathNamespace('data', 'http://schemas.microsoft.com/ado/2007/08/dataservices');
  echo $properties->xpath('data:Id')[0], "\n";
  echo $properties->xpath('data:NEW_DATE')[0], "\n\n";
}

XPath是一种用于定义XML文档部分的语法。 registerXPathNamespace()函数为指定的命名空间创建前缀。

为什么使用atomregisterXPathNamespace()创建<entry xmlns="http://www.w3.org/2005/Atom">前缀以便像//atom:entry/atom:content/meta:properties那样引用它,这是有意义的,因为条目标记不是meta。使用前缀。

为什么创建了m:前缀?已经有//atom:entry/atom:content/m:properties 前缀定义了相同的命名空间。

使用下面的内容会做同样的事情吗?

string sql = "SELECT * FROM bus_seats WHERE sefer_id = 1";
using (SQLiteCommand command = new SQLiteCommand(sql, connect))
{
    SQLiteDataReader reader = command.ExecuteReader();
    while (reader.Read())
    {
        if (Convert.ToInt32(reader["5"]) == 1)
        {
            checkBox5.BackColor = Color.CornflowerBlue;
        }
    }
}

不幸的是,直到今天晚些时候我才能访问我的服务器。我自己会自己测试一下。如果它不起作用,对它为什么不感兴趣,逻辑会暗示它应该?

2 个答案:

答案 0 :(得分:3)

m:前缀绑定在XML实例中,但您的XPath处理器并不知道。它需要单独绑定(注册)前缀。

meta:前缀是任意的。它可能就像XML一样m:,但它并不重要。只要URI是相同的。 <{1}}前缀可能已经atom:,但仍可以使用。

答案 1 :(得分:0)

这可能会对你有所帮助。我在网上找到的命名空间最佳指南。

https://www2.informatik.hu-berlin.de/~xing/Lib/NamespacesFAQ.htm#q8_5