我有一个包含 XML 的 java 字符串。我想通读这个 Java String 包装 CData 中的所有文本节点,只是我不知道该怎么做。这样做的原因是这是一个包含尖括号的文本节点,当我尝试解析字符串时会导致异常。任何人都可以帮助我吗?
<node> this < is text <node> <node2> this is < text <node2>
我想知道是否有一种简单的方法可以使用 XMLReader 将此文本作为字符串读取并在文本周围插入 CData
谢谢
斯特凡
我有一个包含 XML 的 java 字符串。我想通读这个 Java String 包装 CData 中的所有文本节点,只是我不知道该怎么做。这样做的原因是这是一个包含尖括号的文本节点,当我尝试解析字符串时会导致异常。任何人都可以帮助我吗?
<node> this < is text <node> <node2> this is < text <node2>
我想知道是否有一种简单的方法可以使用 XMLReader 将此文本作为字符串读取并在文本周围插入 CData
谢谢
斯特凡
也许是这样的(提前为任何低效率道歉:
if(currentNode instanceof XMLNodeType.Text)
{
String toWrite = String.format("<![CDATA[%s]]>", currentNode.getText());
// or whatever retrieves text of the node
}
看起来您需要将数据按摩为有效的 XML。这个过程当然高度依赖于您的输入。所以基本上发生的事情是您收到一个需要将其转换为有效 XML 的大字符串。这里的好处是您可以定义第三方遵守的模式,这是与他们的会议,因此不在讨论范围内,但值得一提。一旦你定义了这个模式,你就会知道哪些节点被认为是“文本”节点并且需要被包裹在CDATA
块中。
基本思想是这样的:
List<String> textTags = new ArrayList<String>();
textTags.add("NODE");
//other things to add
String bigAwfulString = inputFromThirdParty();
String validXML = "";
for(String currentNode : bigAwfulString.split("yourRegexHere")
{
if(textTags.contains(currentNode)
{
validXML+=String.format("<![CDATA[%s]]>", currentNode.getText());
continue;
}
validXML+=currentNode;
}
试试这个,它对我有用。
http://www.java2s.com/Code/Java/XML/AddingaCDATASectiontoaDOMDocument.htm
import java.io.File;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.CDATASection;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class Main {
public static void main(String[] argv) throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(true);
factory.setExpandEntityReferences(false);
Document doc = factory.newDocumentBuilder().parse(new File("filename"));
Element element = doc.getElementById("key1");
// Add a CDATA section to the root element
element = doc.getDocumentElement();
CDATASection cdata = doc.createCDATASection("data");
element.appendChild(cdata);
}
}