私はXMLを取得し、XML要素をドキュメントオブジェクトに変換し、すでに作成されている要素の値と属性を取得するような場合があります
以下は、文字列をDOMドキュメントオブジェクトに変換しようとしたコードです。
String xmlString = " <r><e>d</e></r>";
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
org.w3c.dom.Document document = builder.parse(new InputSource(new StringReader(xmlString)));
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(document);
StreamResult result = new StreamResult(new StringWriter());
transformer.transform(source, result);
String str1 = result.getWriter().toString();
System.out.println(str1);
しかし、このケースは、属性のない要素に対してのみ有効です。
String xmlString = "<element attribname="value" attribname1="value1"> pcdata</element>"
属性値「値」に二重引用符を使用しています。コンパイラはエラーを表示しています
このシナリオを処理するためのXMLエンコーダーとデコーダーがあるかどうかを教えてください。
あなたが試すことができます
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
InputSource is = new InputSource();
is.setCharacterStream(new StringReader("<root><node1></node1></root>"));
Document doc = db.parse(is);
これを参照してください http://www.Java2s.com/Code/Java/XML/ParseanXMLstringUsingDOMandaStringReader.htm
\
で二重引用符をエスケープする
String xmlString = "<element attribname=\"value\" attribname1=\"value1\"> pcdata</element>"
または代わりに一重引用符を使用します
String xmlString = "<element attribname='value' attribname1='value1'> pcdata</element>"
public static void main(String[] args) {
final String xmlStr = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n"+
"<Emp id=\"1\"><name>Pankaj</name><age>25</age>\n"+
"<role>Developer</role><gen>Male</gen></Emp>";
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder;
try
{
builder = factory.newDocumentBuilder();
Document doc = builder.parse( new InputSource( new StringReader( xmlStr )) );
} catch (Exception e) {
e.printStackTrace();
}
}
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = db.parse(new ByteArrayInputStream(xmlString.getBytes("UTF-8"))); //remove the parameter UTF-8 if you don't want to specify the Encoding type.
xML構造が複雑であっても、これはうまく機能します。
また、xmlStringがXMLに対して有効であることを確認してください。エスケープ文字が先頭に「\」を追加する必要があることに注意してください。
主な問題は属性に起因しない場合があります。