如何在两个xml标签之间输出?

时间:2013-04-09 15:00:24

标签: java php xml tags

我从未见过像这样的标记:

<verse sID=".1.1" osisID=".1.1" /> data data <verse eID=".1.1"/> 

因为我认为它应该是这样的:

<verse osisID=".1.1"> data data </verse>

问题是我试图在<verse/> texts <verse/>.之间输出文本 我有很多xml来显示这些打开和关闭标签之间的文本。如果<verse> texts </verse>,它将起作用。 如何使用Java或PHP编写代码来输出这些标记之间的文本。我用PHP编写了它。

<?php
$xml = simplexml_load_file("go.xml");

foreach ($xml->osisText->div->p->verse as $verse) {
   echo $verse."<br/><br/>";
}
?> 

它不起作用。我没有尝试过Java 以下是xml示例。

<?xml version="1.0" encoding="UTF-8"?>
<osis xmlns="http://www.bibletechnologies.net/2003/OSIS/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.bibletechnologies.net/2003/OSIS/namespace http://www.bibletechnologies.net/osisCore.2.1.1.xsd">
    <osisText xml:lang="en">
        <chapter sID=".1" osisID=".1"/>
        <div type="section">
            <p>
                <verse sID=".1.1" osisID=".1.1" />
                Hello Verse One
                <verse eID=".1.1" osisID=".1.1" />
                <verse sID=".1.2" osisID=".1.2" />
                Hello Verse Two
                <verse eID=".1.2" osisID=".1.2" />
            </p>
            <p>
                <verse sID=".1.3" osisID=".1.3" />
                Hello Verse One
                <verse eID=".1.3" osisID=".1.3" />
                <verse sID=".1.4" osisID=".1.4" />
                Hello Verse Two
                <verse eID=".1.4" osisID=".1.4" />
            </p>
        </div>
    </osisText>
</osis>

2 个答案:

答案 0 :(得分:0)

简单的解决方案是正则表达式

    String s = "<verse sID=\".1.1\" osisID=\".1.1\" /> data data <verse eID=\".1.1\"/>"; 
    s = s.replaceAll("<verse .+ />(.+)<verse .+/>", "$1");
    System.out.println(s);

输出

 data data 

答案 1 :(得分:0)

尝试使用此功能:

function extractContents($string, $start, $end)
{
    $pos = stripos($string, $start);
    $str = substr($string, $pos);
    $str_two = substr($str, strlen($start));
    $second_pos = stripos($str_two, $end);
    $str_three = substr($str_two, 0, $second_pos);
    $extractedContents = trim($str_three);
    return $extractedContents;
}

然后像这样调用它:

$start = '/>';
$end = '<verse';
$contents = extractContents($string, $start, $end)