几个小时以来我尝试用xsd架构从xml文件中读出数据,但我无法弄清楚我是如何处理数据的。我可以验证文件,但我无法访问数据, 如何创建一个对象,我是否必须创建一个新的xml文件?
谢谢!
这是迄今为止的代码 PHP
$doc = new DOMDocument();
$doc->load('xml/test.xml');
if ($doc->schemaValidate('http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS/CAAMLv5_BulletinEAWS.xsd')) {
echo $doc->MetaData;
}
这里是xml文件的前几行
<?xml version="1.0" encoding="UTF-8"?>
<caaml:Bulletin xmlns:caaml="http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS/CAAMLv5_BulletinEAWS.xsd" gml:id="BulletinDeID1175">
<caaml:metaDataProperty>
<caaml:MetaData>
<caaml:dateTimeReport>2014-03-06T07:30:00+01:00</caaml:dateTimeReport>
<caaml:srcRef xlink:href="OpIDLwdTirol"/>
<caaml:comment>Rudi Mair</caaml:comment>
</caaml:MetaData>
</caaml:metaDataProperty>
<caaml:validTime>
<caaml:TimeInstant>
<caaml:timePosition>2014-03-06+01:00</caaml:timePosition>
</caaml:TimeInstant>
</caaml:validTime>
<caaml:bulletinResultsOf>
<caaml:BulletinMeasurements>
<caaml:extFiles>
<caaml:ExtFile gml:id="ExtFileID01">
<caaml:description></caaml:description>
<caaml:fileReferenceURI>http://lwdweb.tirol.gv.at/fotos/Franz_Senn_Huette.jpg</caaml:fileReferenceURI>
</caaml:ExtFile>
</caaml:extFiles>
答案 0 :(得分:1)
只有在文件有效时才会调用您的代码块。你的例子不完整。我认为它是完整有效的。考虑到这一点,您的问题与XML Schema无关,而是与节点选择和XML命名空间无关。
您可以使用XPath提取数据。您还需要注册命名空间,因为您的XML源使用了一个命名空间。下面的代码从源XML中读取三个字段:
$doc = new DOMDocument();
$doc->load('xml/test.xml');
$xpath = new DOMXpath($doc);
$xpath->registerNamespace("caaml", "http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS");
if ($doc->schemaValidate('http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS/CAAMLv5_BulletinEAWS.xsd')) {
echo '<ul>'."\n";
echo ' <li>dateTimeReport: '.$xpath->evaluate("//caaml:MetaData/caaml:dateTimeReport")->item(0)->nodeValue.'</li>'."\n";
echo ' <li>srcRef: '.$xpath->evaluate("//caaml:MetaData/caaml:srcRef/@*[local-name()='href']")->item(0)->nodeValue.'</li>'."\n";
echo ' <li>comment: '.$xpath->evaluate("//caaml:MetaData/caaml:comment")->item(0)->nodeValue.'</li>'."\n";
echo '</ul>'."\n";
}
它将打印:
<ul>
<li>dateTimeReport: 2014-03-06T07:30:00+01:00</li>
<li>srcRef: OpIDLwdTirol</li>
<li>comment: Rudi Mair</li>
</ul>
您可以在此处查看并测试它:http://codepad.viper-7.com/fRBDrU