Wael
Wael

Reputation: 1563

How to parse an XML that has an & in its tag name using XPath in Java?

I want to parse an XML whose tag contains an & for example: <xml><OC&C>12.4</OC&C></xml>. I tried to escape & to &amp; but that didn't fix the issue for tag name (it fixes it for values only), currently my code is throwing an exception, see complete function below.

public static void main(String[] args) throws Exception
{
  String xmlString        = "<xml><OC&C>12.4</OC&C></xml>";
  xmlString = xmlString.replaceAll("&", "&amp;");
  String path             = "xml";
  InputSource inputSource = new InputSource(new StringReader(xmlString));
  try
  {
    Document xmlDocument            = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(inputSource);
    XPath xPath                     = XPathFactory.newInstance().newXPath();
    XPathExpression xPathExpression = xPath.compile(path);

    System.out.println("Compiled Successfully.");
  }
  catch (SAXException e)
  {
    System.out.println("Error while retrieving node Path:" + path + " from " + xmlString + ". Returning null");
  }
}

Upvotes: 0

Views: 228

Answers (3)

Michael Kay
Michael Kay

Reputation: 163262

It's not "an XML". It's a non-XML. XML doesn't allow ampersands in names. Therefore, you can't parse it successfully using an XML parser.

Upvotes: 1

Arawak
Arawak

Reputation: 21

Hmmm... I don't think that it is a legal XML name. I'd think about using a regex to replace OC&C to something legal first, and then parse it.

Upvotes: 2

Cylian
Cylian

Reputation: 11182

xml could not be name of any XML element. So, your XML fragment could never be parsed anyway. Then you could try something like that.

<name><![CDATA[<OC&C>12.4</OC&C>]]></name>

Upvotes: 0

Related Questions