Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.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中使用XPath在其标记名中?_Java_Xpath_Xml Parsing - Fatal编程技术网

如何解析具有&;在Java中使用XPath在其标记名中?

如何解析具有&;在Java中使用XPath在其标记名中?,java,xpath,xml-parsing,Java,Xpath,Xml Parsing,我想解析一个XML,它的标签包含一个&,例如:12.4。我试图逃出&到&但这并没有解决标记名的问题(它只解决了值的问题),目前我的代码引发了一个异常,请参阅下面的完整函数 public static void main(String[] args) throws Exception { String xmlString = "<xml><OC&C>12.4</OC&C></xml>"; xmlString

我想解析一个
XML
,它的标签包含一个
&
,例如:
12.4
。我试图逃出
&
&但这并没有解决标记名的问题(它只解决了值的问题),目前我的代码引发了一个异常,请参阅下面的完整函数

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");
  }
}
publicstaticvoidmain(字符串[]args)引发异常
{
字符串xmlString=“12.4”;
xmlString=xmlString.replaceAll(&,“&;”);
字符串path=“xml”;
InputSource InputSource=新的InputSource(新的StringReader(xmlString));
尝试
{
Document xmlDocument=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(inputSource);
XPath=XPathFactory.newInstance().newXPath();
XPathExpression=xPath.compile(路径);
System.out.println(“编译成功”);
}
捕获(SAXE异常)
{
System.out.println(“从“+xmlString+”检索节点路径时出错:“+Path+”。返回null”);
}
}

xml
不能是任何xml元素的名称。因此,无论如何都无法解析XML片段。那你可以试试这样的

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

xml
不能是任何xml元素的名称。因此,无论如何都无法解析XML片段。那你可以试试这样的

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

Hmmm。。。我不认为是这样。我想先用正则表达式将OC&C替换成合法的东西,然后再对其进行解析。

嗯。。。我不认为是这样。我想先用正则表达式将OC&C替换成合法的东西,然后再解析它。

它不是“XML”。这是一个非XML文件。XML不允许在名称中使用符号。因此,使用XML解析器无法成功解析它。

它不是“XML”。这是一个非XML文件。XML不允许在名称中使用符号。因此,您无法使用XML解析器成功解析它。

如果您可以访问形成XML的脚本,只需添加到标记名实际上您的
XML
无效,请阅读如果您可以访问形成XML的脚本,只需添加到标记名实际上您的
XML
无效,请阅读关于使用正则表达式处理XML的内容,请看:@Arian我不认为Arawak建议他用正则表达式解析文档。他建议搜索并替换,这是正则表达式非常适合的。然后使用xml解析器进行解析。如果不进行解析,就无法安全地搜索和替换xml文档。关于使用正则表达式处理xml,请参见:@Arian我不认为Arawak建议他使用正则表达式解析文档。他建议搜索并替换,这是正则表达式非常适合的。然后使用xml解析器进行解析。如果不对xml文档进行解析,则无法安全地搜索和替换xml文档。