Java 用于搜索不相对于根节点的节点的Xpath表达式适用于XML文件,但对XSD文件无效
这是我的XML(wls.XML) 当我解析XML文件并运行“\ElemName”类型的表达式时,问题就出现了,它可以正常工作并获取节点。然后我对XSD文件执行相同的操作,它返回NULL。 对于XSD,我需要使用“\RootNode\mediatenode….\ReqdNode” 我用不同的XML和XSD名称尝试了这个方法,只是附加这些简短的文件以供说明 问题2 还有一个问题: 假设我有一个元素'xs:schema',并且我只需要获取本地名称部分(没有名称空间前缀),比如'schema',我怎么做?我尝试了getLocalName(),但它不起作用 (如果您需要知道,我正在使用jdk6) 请至少为我的第一期提供一个解决方案Java 用于搜索不相对于根节点的节点的Xpath表达式适用于XML文件,但对XSD文件无效,java,xml,xpath,xsd,Java,Xml,Xpath,Xsd,这是我的XML(wls.XML) 当我解析XML文件并运行“\ElemName”类型的表达式时,问题就出现了,它可以正常工作并获取节点。然后我对XSD文件执行相同的操作,它返回NULL。 对于XSD,我需要使用“\RootNode\mediatenode….\ReqdNode” 我用不同的XML和XSD名称尝试了这个方法,只是附加这些简短的文件以供说明 问题2 还有一个问题: 假设我有一个元素'xs:schema',并且我只需要获取本地名称部分(没有名称空间前缀),比如'schema',我怎么做
提前感谢。如果您试图让XPath在XSD模式上工作,请确保从XSD
xmlns:xs=”声明名称空间http://www.w3.org/2001/XMLSchema“
如果不想使用名称空间,可以使用XPath,如下所示:
//*[local-name()='element']
/*[local-name()='schema']/*[local-name()='element']
您好@markdark,谢谢您的回复…….您提到的第二点(local-name())很好:)。。。。。。。。。。。。但我无法理解架构的事情。因为如果你看一下我在我的主要帖子(wls.xsd)中发布的模式,它有一行“”。。。但是它似乎不起作用……请你也看一下好吗?如果其他人需要引用元素的属性,此评论只是为了帮助他们://*[local-name()='element'][@id='1234']]…即不需要对元素的属性使用local-name()…谢谢你的解决方案标记
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
public static void test1()
{
String ipFile="w3s.xml";//wls.xsd
Node fetchNode=null;
FileInputStream fileip;
try {
fileip = new FileInputStream(new File(ipFile));
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document xmlDocument = builder.parse(fileip);
System.out.println(xmlDocument.getDocumentElement().getNodeName());
System.out.println(xmlDocument.getDocumentElement().getLocalName());
evalXpath(xmlDocument,"//xs:element");//FAILS
evalXpath(xmlDocument,"//element");//FAILS
evalXpath(xmlDocument,"/schema/element");//WORKS
evalXpath(xmlDocument,"/xs:schema/xs:element");//FAILS
evalXpath(xmlDocument,"//heading");//FAILS
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void evalXpath(Document xmlDocument,String expression)
{
Node fetchNode=null;
NodeList fetchNodeList=null;
//String expression=null;
try
{
XPath xPath = XPathFactory.newInstance().newXPath();
fetchNode = (Node) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODE);
System.out.println(fetchNode);
fetchNodeList = (NodeList) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODESET);
System.out.println(fetchNodeList.getLength());
}
catch (XPathExpressionException e) {
e.printStackTrace();
}
}
}
//*[local-name()='element']
/*[local-name()='schema']/*[local-name()='element']