如何读取我不知道的随机/动态xml标签名称?

时间:2011-08-15 04:33:25

标签: php xml tags tagname

我想执行如下的xml数据交换:

传入的xml数据有一些我不知道标签名称的标签。

我可以在不知道标签名称的情况下阅读这些标签吗? 另外,我如何将标签名称作为数据属性?

例如: 我想阅读不同的患者记录。每个病人都有不同的疾病。如'心脏病','癌症'。

<heart disease>serious</heart disease>
<cancer>normal</cancer>

之前我不知道这两个标签。但我想阅读标签名称并展示它。 最后,我可以得到数据: 心脏病:严重的 癌症正常:

4 个答案:

答案 0 :(得分:1)

好吧,我觉得我应该首先警告你,空格不能生成有效的XML标签。您可以添加<white space>STUFF</white space>,但会将其读作<white>标记。使用更宽容的解释器,您可能会发现它具有真正的space布尔属性。将\s替换为-

使用DOMDocument,要读取子节点而不了解它们,除了它们是子节点之外,您将使用适当命名的childNodes属性:

$doc = new DOMDocument();
$rand = rand(1,100);
$doc->loadXML('<root><i'.$rand.'><cannot-know-i /></i'.$rand.'></root>');
foreach( $doc->documentElement->childNodes as $node )
    print $node->nodeName; // i$rand

答案 1 :(得分:1)

是的,你可以,例如使用Simple XML:

$xml = new SimpleXMLElement($fileName, NULL, true);

foreach ($xml->children() as $child)
{
    print child->getName();

    foreach ($child->attributes() as $attribute)
    {
        print $attribute.', ';
    }
}

答案 2 :(得分:0)

我认为此链接会对您有所帮助。访问http://www.php.net/manual/en/class.simplexmlelement.php

答案 3 :(得分:0)

我建议您将XML格式化为另一种格式。你知道的格式。像这样:

<?xml version="1.0" ?> 
    <Information>
        <Disease target="heart" />
        <Cancer type="normal" />
    </Information>
</xml>

然后,您可以使用编程语言中可用的每个解析器(在您的情况下为PHP)。