Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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
Dom JavaFXWebEngine和XPath区分大小写问题?_Dom_Xpath_Javafx - Fatal编程技术网

Dom JavaFXWebEngine和XPath区分大小写问题?

Dom JavaFXWebEngine和XPath区分大小写问题?,dom,xpath,javafx,Dom,Xpath,Javafx,我有一个来自JavaFX2.2WebEngine的文档对象。在下面的代码中,即使加载的文档具有小写的html标记,getDocumentElement().getNodeName()也会以大写返回它。因此,XPath查询无法定位节点(因为它需要小写的html标记)。在这种情况下,我可以强制getNodeName()的输出为小写,但一般来说,如果文档有混合大小写标记,如何处理它 public class XPath3 extends Application { WebView view; Web

我有一个来自JavaFX2.2WebEngine的文档对象。在下面的代码中,即使加载的文档具有小写的html标记,getDocumentElement().getNodeName()也会以大写返回它。因此,XPath查询无法定位节点(因为它需要小写的html标记)。在这种情况下,我可以强制getNodeName()的输出为小写,但一般来说,如果文档有混合大小写标记,如何处理它

public class XPath3 extends Application {

WebView view;
WebEngine engine;

@Override
public void start(Stage primaryStage) {

    view = new WebView();
    engine = view.getEngine();

    engine.getLoadWorker().stateProperty().addListener(
            new ChangeListener<Worker.State>() {
        @Override
        public void changed(ObservableValue<? extends Worker.State> ov, Worker.State t, Worker.State t1) {
            if (t1 == Worker.State.SUCCEEDED) {
                Document doc = engine.getDocument();
                XPath xPath = XPathFactory.newInstance().newXPath();
                xPath.setNamespaceContext(new NamespaceContext() {
                    @Override
                    public String getNamespaceURI(String pfx) {
                        if ("ns1".equals(pfx)) {
                            return "http://www.w3.org/1999/xhtml";
                        }
                        return XMLConstants.NULL_NS_URI;
                    }

                    @Override
                    public String getPrefix(String string) {
                        return null;
                    }

                    @Override
                    public Iterator getPrefixes(String string) {
                        return null;
                    }
                });
                NodeList nl = null;
                String path = "/ns1:" + doc.getDocumentElement().getNodeName();
                //path = "/ns1:html";
                System.out.println(path);
                try {
                    nl = (NodeList) xPath.compile(path).evaluate(doc, XPathConstants.NODESET);
                } catch (XPathExpressionException ex) {
                    System.exit(-11);
                }
                System.out.println("XPath: " + path + "    Count: " + nl.getLength());
                System.exit(-1);
            }
        }
    });

    Platform.runLater(new Runnable() {
        @Override
        public void run() {
            engine.loadContent("<html><body> hello! </body></html>");
        }
    });
}

/**
 * The main() method is ignored in correctly deployed JavaFX application.
 * main() serves only as fallback in case the application can not be
 * launched through deployment artifacts, e.g., in IDEs with limited FX
 * support. NetBeans ignores main().
 *
 * @param args the command line arguments
 */
public static void main(String[] args) {
    launch(args);
}
公共类XPath3扩展了应用程序{
网络视图;
网络引擎;
@凌驾
公共无效开始(阶段primaryStage){
视图=新的WebView();
engine=view.getEngine();
engine.getLoadWorker().stateProperty().addListener(
新的ChangeListener(){
@凌驾
公共无效已更改(可观察值)