Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.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 Dom4J:如何用XML元素的文本值替换XML元素_Java_Dom4j - Fatal编程技术网

Java Dom4J:如何用XML元素的文本值替换XML元素

Java Dom4J:如何用XML元素的文本值替换XML元素,java,dom4j,Java,Dom4j,我使用dom4j解析xml,如下所示: <node> somestring<br/>some <a href="stackoverflow.com">another string</a> </node> <node> somestring<br/>some another string </node> somestring一些 我想将其更改为另一个xml,如下所示: <

我使用dom4j解析xml,如下所示:

<node>
    somestring<br/>some <a href="stackoverflow.com">another string</a> 
</node>
<node>
    somestring<br/>some another string
</node>

somestring
一些
我想将其更改为另一个xml,如下所示:

<node>
    somestring<br/>some <a href="stackoverflow.com">another string</a> 
</node>
<node>
    somestring<br/>some another string
</node>

somestring
另一个字符串
对于dom4j,这可能吗


我认为诀窍在于解析文本中的节点。

您可以通过运行节点元素内容并用其文本值替换“a”标记来实现所需的操作

因此,假设将节点放入
元素
对象中

String originalXml = "<node>somestring<br/>some <a href=\"stackoverflow.com\">another string</a></node>";
Document document = DocumentHelper.parseText(originalXml);
Element nodeElement = document.getRootElement();
String originalXml=“somestring
some”; Document Document=DocumentHelper.parseText(原始XML); 元素nodeElement=document.getRootElement();
您可以这样做,请参见内联注释:

// once you have your node, as an Element object, get its content
List<Object> content = nodeElement.content();

// go through the content list and replace any "a" tag by its text value
List<Object> newContent = new ArrayList<>();
for(Object o : content) {
  Object newContentObject = o; // keep the same value by default
  if(o instanceof DefaultElement) {
    DefaultElement elem = (DefaultElement)o;
    String tagName = elem.getQName().getName();
    if("a".equals(tagName)) // this is an "a" tag, replace it by a text element
      newContentObject = new DefaultText(elem.getText());
  }
  newContent.add(newContentObject);
}

// Set the new content to your element
nodeElement.setContent(newContent);

System.out.print(nodeElement.asXML());
//拥有节点后,作为元素对象,获取其内容
列表内容=nodeElement.content();
//浏览内容列表并用其文本值替换任何“a”标记
List newContent=newarraylist();
for(对象o:内容){
Object newContentObject=o;//默认情况下保持相同的值
if(o DefaultElement的instanceof){
DefaultElement元素=(DefaultElement)o;
字符串标记名=elem.getQName().getName();
如果(“a”.equals(标记名))//这是一个“a”标记,用文本元素替换它
newContentObject=newDefaultText(elem.getText());
}
添加(newContentObject);
}
//将新内容设置为元素
nodeElement.setContent(newContent);
System.out.print(nodeElement.asXML());
这将产生:

<node>somestring<br/>some another string</node>
somestring
另一个字符串
不需要“技巧”或额外的解析
具有混合内容,即文本后跟一个空的

元素,后跟更多文本(空格)和一个
元素。您应该可以看到所有这些对象的DOM节点。@JimGarrison是的,我可以按元素获取所有文本。getText()。但是如何按顺序替换节点?考虑用字符串“\n”替换
eland,字符串变成“String \n另一个字符串”。