首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP中的xPath属性值

PHP中的xPath属性值
EN

Stack Overflow用户
提问于 2014-01-17 14:48:50
回答 1查看 181关注 0票数 1

我尝试使用xPath从XML中获取吸引人的数据。我不能得到属性。

XML:

代码语言:javascript
复制
<table:table-row>
    <table:table-cell table:style-name="Tabella1.A2" office:value-type="string">
        <text:p text:style-name="Standard">RAG. SOC.:</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabella1.B2" office:value-type="string">
        <text:p text:style-name="Standard">
            <text:database-display text:table-name="portale.anaTanagrafica" text:table-type="table" text:column-name="ana_rag_sociale" text:database-name="Nuovo database">&lt;ana_rag_sociale&gt;</text:database-display>
        </text:p>
    </table:table-cell>
</table:table-row>

和PHP函数:

代码语言:javascript
复制
$path = "//text:database-display";        
if ($xml !== FALSE) {
    foreach($xml->xpath($path) as $agenzia) {
        FB::INFO("Nodo: " . $agenzia);
        FB::INFO("Nodo: " . $agenzia[@"text:table-name"]);
    } 
}

我想要的是以下输出:

代码语言:javascript
复制
Nodo: &lt;ana_rag_sociale&gt;
Nodo: portale.anaTanagrafica

ThankS!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-17 22:34:14

您需要向SimpleXML注册名称空间。

代码语言:javascript
复制
$xml->registerXPathNamespace('text', 'youractualtextnamespace');

一旦您这样做了,有几种方法可以访问您想要的数据。下面是一个完整的例子:

代码语言:javascript
复制
$string = <<<XML
<table:table-row xmlns:table="youractualnamespace"
    xmlns:office="youractualofficenamespace" xmlns:text="youractualtextnamespace">
    <table:table-cell table:style-name="Tabella1.A2"
        office:value-type="string">
        <text:p text:style-name="Standard">RAG. SOC.:</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Tabella1.B2"
        office:value-type="string">
        <text:p text:style-name="Standard">
            <text:database-display text:table-name="portale.anaTanagrafica"
                text:table-type="table" text:column-name="ana_rag_sociale"
                text:database-name="Nuovo database">&lt;ana_rag_sociale&gt;</text:database-display>
        </text:p>
    </table:table-cell>
</table:table-row>
XML;

$path = "//text:database-display";
$xml = new SimpleXMLElement($string);
$xml->registerXPathNamespace('text', 'youractualtextnamespace');
if ($xml !== FALSE) {
    foreach($xml->xpath($path) as $agenzia) {
        $attr = $agenzia->xpath("@text:table-name");
        print("Nodo: " . $agenzia);
        print("Nodo: " . $attr[0]);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21188700

复制
相关文章

相似问题

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