我想执行如下的 xml 数据交换:
传入的 xml 数据有一些我不知道标签名称的标签。
我可以在不知道标签名称的情况下阅读这些标签吗?另外我怎样才能将标签名称作为数据属性?
例如:我想阅读不同的患者记录。每个病人都有不同的疾病。如“心脏病”、“癌症”。
<heart disease>serious</heart disease>
<cancer>normal</cancer>
我以前不知道这两个标签。但我想阅读标签名称并展示它。最后,我可以得到数据:心脏病:严重癌症正常:
好吧,我觉得我应该首先警告您,空白不构成有效的 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
是的,您可以,例如使用简单 XML:
$xml = new SimpleXMLElement($fileName, NULL, true);
foreach ($xml->children() as $child)
{
print child->getName();
foreach ($child->attributes() as $attribute)
{
print $attribute.', ';
}
}
我建议您将 XML 格式化为另一种格式。以您知道的格式。像这样的东西:
<?xml version="1.0" ?>
<Information>
<Disease target="heart" />
<Cancer type="normal" />
</Information>
</xml>
然后,您可以使用您的编程语言中可用的每个解析器(在您的情况下为 PHP)。