我有一个.usx文件,我想从中获取数据.但现在找到任何方法来做到这一点.请帮帮我. usx文件链接
我试过下面的代码
$xml=simplexml_load_file("uploads/American-Standard-Version-Bible-master/usx/01-GEN.usx") or die("Error: Cannot create object");
foreach($xml->children() as $book)
{
// echo "<pre>";
// print_r($book);
echo "Book Name:".$book->attributes()->code."<br/>";
if($book->attributes()->number != "" )
{
echo "chapter : ".$book->attributes()->number."<br />";
}
foreach ($book->verse as $value) {
// echo "<pre>";
// print_r($value);
echo "Verses Number : ".$value->attributes()->number."<br />";
}
echo "book : ".$book."<br />";
echo "<hr/>";
}
}
Run Code Online (Sandbox Code Playgroud)
我想要逐一输出所有经文而不是一次性输出
问题可能在于 SimpleXML 无法让您对具有简单结构的 XML 进行足够的控制。因此,试图将文本置于<verse>标签之间是很困难的。如果您使用DOMDocument,则可以对文档进行更多详细信息和控制。
下面的代码只是读取文档并主要检查节点名称以找出应显示的内容 - 因此对于元素<chapter>,它将输出 number 属性。唯一的区别是,当查看<para>包含<verse>和 文本混合在一起的主要元素时,它会查找节点类型XML_TEXT_NODE,正如您所期望的那样,它是诗句文本,因此它只输出该点的内容。
$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->load("01-GEN.usx");
foreach ( $dom->documentElement->childNodes as $element ) {
if ( $element->nodeName == "book" ) {
echo "Book Name:".$element->getAttribute("code")."<br/>";
}
else if ( $element->nodeName == "chapter" ) {
echo "chapter:".$element->getAttribute("number")."<br/>";
}
else if ( $element->nodeName == "para" ) {
foreach ( $element->childNodes as $verse ) {
if ( $verse->nodeName == "verse" ) {
echo "verse:".$verse->getAttribute("number")."<br/>";
}
else if ( $verse->nodeType == XML_TEXT_NODE ) {
echo $verse->nodeValue."<br/>";
}
}
}
}
Run Code Online (Sandbox Code Playgroud)