使用php从.USX文件中获取数据

Atm*_*ala 5 php xml

我有一个.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)

输出: 这是输出

我想要逐一输出所有经文而不是一次性输出

Nig*_*Ren 1

问题可能在于 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)