首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SimpleXML名称空间属性和值是空的吗?

SimpleXML名称空间属性和值是空的吗?
EN

Stack Overflow用户
提问于 2015-01-28 16:22:03
回答 1查看 1.6K关注 0票数 1

我有以下类型的XML结构:

代码语言:javascript
复制
<catalog xmlns="http://www.namespace.com">
    <product product-id="test-product">
        <page-attributes>
            <page-title xml:lang="en">test</page-title>
            <page-title xml:lang="de">test2</page-title>
        </page-attributes>
    </product>
</catalog>

我使用以下方法获取该产品及其page-title元素:

代码语言:javascript
复制
$xml->registerXPathNamespace('ns', $xml->getNamespaces()[""]);
$xpath = '//ns:product[@product-id="test-product"]';
$product = $xml->xpath($xpath)[0];

foreach ($product->{'page-attributes'}->{'page-title'} as $title) {
    var_dump($title);
    var_dump($title->{"@attributes"});
    var_dump($title->attributes());
}

但我只得到:

代码语言:javascript
复制
object(SimpleXMLElement)#4 (0) {
}
object(SimpleXMLElement)#6 (0) {
}
object(SimpleXMLElement)#6 (0) {
}
object(SimpleXMLElement)#6 (0) {
}
object(SimpleXMLElement)#4 (0) {
}
object(SimpleXMLElement)#4 (0) {
}

如何获得page-title元素(testtest2)的值?另外,我如何获得属性?属性前面有xml:。这是否意味着属性仅位于它们自己的命名空间中?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-28 16:47:06

您的代码有两处问题:

  • 正如@MichaelBerkowski所提到的,如果试图检索SimpleXMLElement的值,则需要将其转换为string
  • 如果试图检索xml:属性值,则需要指定名称空间lang

您的代码应该如下所示:

代码语言:javascript
复制
$xml->registerXPathNamespace('ns', $xml->getNamespaces()[""]);

$xpath = '//ns:product[@product-id="test-product"]';
$product = $xml->xpath($xpath)[0];

foreach ($product->{'page-attributes'}->{'page-title'} as $title) {
    var_dump((string) $title);
    var_dump((string) $title->attributes('xml', TRUE)['lang']);
}

输出:

代码语言:javascript
复制
string(4) "test"
string(2) "en"
string(5) "test2"
string(2) "de"

关于字符串转换。请注意,如果要尝试执行以下操作:

代码语言:javascript
复制
echo "Title: $title";

您不必显式转换为string,因为SimpleXMLElement支持__toString()方法,并且PHP将自动将其转换为字符串--在这样的字符串上下文中。

var_dump()不能假定字符串上下文,因此它输出变量SimpleXMLElement的“真实”类型。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28197243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档