【问题标题】:getting a xml namespace attribute in php在 php 中获取 xml 命名空间属性
【发布时间】:2019-07-03 13:29:06
【问题描述】:

是否有可能获得attribute: name="Total"value? 我知道在数组中是可能的,但行并不总是相同的。

这是 XML:

<XML>
<resultaten>
<resultaat>
<id>3123709</id>
<antwoord name="Total">9,0</antwoord>
<antwoord name="Communicatie">9,0</antwoord>
<antwoord name="Advies">9,0</antwoord>
<antwoord name="Deskundigheid">9,0</antwoord>
<antwoord name="Betrokkenheid">9,0</antwoord>
<antwoord name="Gemiddelde">9,0</antwoord>
</resultaat>
</resultaten>
</XML>

我试过了:

$xml = simplexml_load_file($url)

$date = $xml->resultaten->resultaat->attributes();
echo $date;

【问题讨论】:

  • 这只是一个属性而不是命名空间 - 但本质上是的,您可以轻松获得

标签: php xml namespaces attributes


【解决方案1】:

我不使用simplexml,因此无法就其方法提供建议,但使用标准DOMDocument 及其相关方法,从您在问题中显示的XML 中获取name 属性值相当简单。

$xml='<XML>
    <resultaten>
        <resultaat>
            <id>3123709</id>
            <antwoord name="Total">9,0</antwoord>
            <antwoord name="Communicatie">9,0</antwoord>
            <antwoord name="Advies">9,0</antwoord>
            <antwoord name="Deskundigheid">9,0</antwoord>
            <antwoord name="Betrokkenheid">9,0</antwoord>
            <antwoord name="Gemiddelde">9,0</antwoord>
        </resultaat>
    </resultaten>
</XML>';


$dom=new DOMDocument;
$dom->loadXML( $xml );
$col=$dom->getElementsByTagName('antwoord');
foreach( $col as $node )echo $node->getAttribute('name') . '<br />';

输出:

Total
Communicatie
Advies
Deskundigheid
Betrokkenheid
Gemiddelde

更新

要使用 url 而不是字符串,只需使用 load 方法,如下所示。

    $url='https://klantenvertellen.nl/xml/van_essen_advocaten';
    $dom=new DOMDocument;
    $dom->load( $url );
    $col=$dom->getElementsByTagName('antwoord');
    foreach( $col as $node )echo $node->getAttribute('name') . '<br />';

输出:

datum
referentie
Uw voornaam/bedrijf:
Aanbeveling:
Geholpen door:
Ervaring:
Totaal oordeel
Communicatie
Advies
Deskun....etc

【讨论】:

  • 问题是我需要数字并且 xml 在 URL 中。 URL = "klantenvertellen.nl/xml/van_essen_advocaten"
  • DOMDocument 有很多方法——其中之一就是load,它将加载一个url而不是一个字符串
  • 我得到了图片,并且使用 nodeValue 我得到了值。谢谢!
【解决方案2】:

按照您最初的要求使用 SimpleXML 非常简单。如果您只想要 Total 值,那么您可以使用 XPath 来获取具有 name 属性的 antwoord 元素,其值为 Totalxpath() 调用返回匹配元素的列表,因此使用[0] 获取第一个。这还会返回一个 SimpleXMLElement,因此要确保该值是一个字符串 - 在使用该值之前将其转换为 (string)...

$xml = simplexml_load_file($url);

$total = $xml->xpath("//antwoord[@name='Total']")[0];
echo (string)$total;

给...

9,0

【讨论】:

    猜你喜欢
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多