Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JAXB:以字符串形式获取标记_Java_Xml_Jaxb - Fatal编程技术网

Java JAXB:以字符串形式获取标记

Java JAXB:以字符串形式获取标记,java,xml,jaxb,Java,Xml,Jaxb,这个问题以前可能在互联网的某个黑暗角落里得到了回答,但我甚至不知道如何形成一个有意义的谷歌查询来搜索它 因此:假设我有一个(简化的)XML文档,如下所示: <root> <tag1>Value</tag1> <tag2>Word</tag2> <tag3> <something1>Foo</something1> <something2>Bar</some

这个问题以前可能在互联网的某个黑暗角落里得到了回答,但我甚至不知道如何形成一个有意义的谷歌查询来搜索它

因此:假设我有一个(简化的)XML文档,如下所示:

<root>
  <tag1>Value</tag1>
  <tag2>Word</tag2>
  <tag3>
    <something1>Foo</something1>
    <something2>Bar</something2>
    <something3>Baz</something3>
  </tag3>
</root>

作为字符串、标记和全部。

我有一个实用方法,在这种情况下可能会对您有用。看看是否有帮助。我用您的示例制作了一个示例代码:

public static void main(String[] args){
    String text= "<root><tag1>Value</tag1><tag2>Word</tag2><tag3><something1>Foo</something1><something2>Bar</something2><something3>Baz</something3></tag3></root>";
    System.out.println(extractTag(text, "<tag3>"));

}

public static String extractTag(String xml, String tag) {
    String value = "";
    String endTag = "</" + tag.substring(1);

    Pattern p = Pattern.compile(tag + "(.*?)" + endTag);
    Matcher m = p.matcher(xml);

    if (m.find()) {
        value = m.group(1);
    }

    return value;
}
publicstaticvoidmain(字符串[]args){
String text=“ValueWordFooBarBaz”;
System.out.println(extractTag(文本“”);
}
公共静态字符串提取标记(字符串xml、字符串标记){
字符串值=”;

String endTag=“使用注释@xmlanyement。 我一直在寻找相同的解决方案,我希望找到一些阻止解析dom的注释,并按原样使用,但没有找到

详情见: 和 我在方法getElement()中添加了一个cheking,否则我们可能会得到IndexOutOfBoundsException

if (xml.indexOf(START_TAG) < 0) {
    return "";
}
if(xml.indexOf(START_标记)<0){
返回“”;
}
对于我来说,这个解决方案的行为非常奇怪。对xml的每个标记都会调用方法getElement()。第一个调用是“Value”,第二个是“ValueWord”,等等。它会为上一个标记添加下一个标记

更新: 我注意到这种方法只适用于我们要解析为字符串的标记的一次出现。不可能正确解析下面的示例:

<root>
<parent1>
    <tag1>Value</tag1>
    <tag2>Word</tag2>
    <tag3>
        <something1>Foo</something1>
        <something2>Bar</something2>
        <something3>Baz</something3>
    </tag3>
</parent1>
<parent2>
    <tag1>Value</tag1>
    <tag2>Word</tag2>
    <tag3>
        <something1>TheSecondFoo</something1>
        <something2>TheSecondBar</something2>
        <something3>TheSecondBaz</something3>
    </tag3>
</parent2>

价值
单词
福
酒吧
巴兹
价值
单词
第二个
第二棒
第二个巴兹

带有父标记“parent2”的“tag3”将包含来自第一个标记(Foo、Bar、Baz)的参数,而不是(secondfoo、secondbar、secondbaz) 如有任何建议,我们将不胜感激。
谢谢。

在这种情况下,你没有拆封。获取完整的XML,并使用正则表达式或自定义解析来获取
的所有内容。我在问了这个问题后偶然发现了那篇博文,并最终使用了该解决方案。考虑到其他回答完全失败,你得到了绿色的复选标记。我想它有一些问题与此有关的是:
<root>
<parent1>
    <tag1>Value</tag1>
    <tag2>Word</tag2>
    <tag3>
        <something1>Foo</something1>
        <something2>Bar</something2>
        <something3>Baz</something3>
    </tag3>
</parent1>
<parent2>
    <tag1>Value</tag1>
    <tag2>Word</tag2>
    <tag3>
        <something1>TheSecondFoo</something1>
        <something2>TheSecondBar</something2>
        <something3>TheSecondBaz</something3>
    </tag3>
</parent2>