Java 用于搜索不相对于根节点的节点的Xpath表达式适用于XML文件,但对XSD文件无效

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',我怎么做

这是我的XML(wls.XML)

当我解析XML文件并运行“\ElemName”类型的表达式时,问题就出现了,它可以正常工作并获取节点。然后我对XSD文件执行相同的操作,它返回NULL。 对于XSD,我需要使用“\RootNode\mediatenode….\ReqdNode” 我用不同的XML和XSD名称尝试了这个方法,只是附加这些简短的文件以供说明

问题2 还有一个问题: 假设我有一个元素'xs:schema',并且我只需要获取本地名称部分(没有名称空间前缀),比如'schema',我怎么做?我尝试了getLocalName(),但它不起作用

(如果您需要知道,我正在使用jdk6)

请至少为我的第一期提供一个解决方案


提前感谢。

如果您试图让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']