Я хотел бы добавить корневой элемент в мою строку xml и затем проанализировать данные.Добавить корневой элемент в строку xml и проанализировать данные в java
У меня нет хорошо отформатированной строки xml, которая генерирует исключение при разборе, поэтому я хотел бы добавить корневой элемент в свою строку xml, а затем отправить его Document doc = dBuilder.parse(iSource);
для синтаксического анализа. Так может кто-нибудь предложить мне, как это сделать?
Ошибка:
org.xml.sax.SAXParseException: The markup in the document following the root element must be well-formed.
at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
XML-строка:
System.out.println(StdOut);
печатает, как показано ниже
<?xml version="1.0" encoding="UTF-8"?>
<transaction id="1">
<header>
<method>Agent007</method>
<subclass>ERROR</subclass>
</header>
<data>
<incoming_message>xxxxxxxxx</incoming_message>
<errorcode>FAIL</errorcode>
<errortext>There are no Integration Services </errortext>
<errordetail>exceptions.ServiceNotFoundException</errordetail>
</data>
</transaction>
кода я использовал:
public String parseStatusXML(String StdOut)
{
String stdOutResult = null;
try
{
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
InputSource iSource = new InputSource();
iSource.setCharacterStream(new StringReader(StdOut));
Document doc = dBuilder.parse(iSource);
NodeList subClassNode = doc.getElementsByTagName("subclass");
Element element = (Element) subClassNode.item(0);
if (getCharacterDataFromElement(element).equalsIgnoreCase("ERROR"))
{
System.out.println(" getCharacterDataFromElement(element) : "
+ getCharacterDataFromElement(element));
NodeList dataNode = doc.getElementsByTagName("data");
for (int i = 0; i < dataNode.getLength(); i++)
{
Element dataElement = (Element) dataNode.item(i);
NodeList errorCodeNode = dataElement.getElementsByTagName("errorcode");
Element errorCodeElement = (Element) errorCodeNode.item(0);
NodeList errorTextNode = dataElement.getElementsByTagName("errortext");
Element errorTextElement = (Element) errorTextNode.item(0);
NodeList errorDetailNode = dataElement.getElementsByTagName("errordetail");
Element errorDetailElement = (Element) errorDetailNode.item(0);
// passing ERROR flag
stdOutResult = getCharacterDataFromElement(element);
}
}
else if (getCharacterDataFromElement(element).equalsIgnoreCase("OK"))
{
stdOutResult = getCharacterDataFromElement(element);
}
}
catch (Exception e)
{
e.printStackTrace();
}
return stdOutResult;
}
public static String getCharacterDataFromElement(Element e)
{
Node child = e.getFirstChild();
if (child instanceof CharacterData)
{
CharacterData cd = (CharacterData) child;
return cd.getData();
}
return "?";
}
Пожалуйста, если вы хотите задать вопрос, задайте вопрос. –
Я бы порекомендовал попробовать встроенный парсер jdk вместо прямого использования xerces. – jtahlborn