Javascript xpath为什么选择空白?

Javascript xpath为什么选择空白?,javascript,xpath,Javascript,Xpath,我有一个国家的XML列表,如下所示: <countries> <country> <code>CA</code> <country>Canada</country> </country> ... etc... </countries> 我想选择节点并在它们之间迭代,以便使用 path "/countries/*" 然后在JavaScript中: nodes = xml.

我有一个国家的XML列表,如下所示:

<countries>
  <country>
    <code>CA</code>
    <country>Canada</country>
  </country>
  ... etc...
</countries>
我想选择节点并在它们之间迭代,以便使用

path "/countries/*"
然后在JavaScript中:

nodes = xml.evaluate(path, xml, null, XPathResult.ANY_TYPE, null);
当我迭代时,我发现第一个和第三个节点是空白(换行符),第二个和第四个节点是我想要的实际XML


如何使用XPath忽略空白节点?我只对XML部分感兴趣,不能保证XML会包含换行符

你不能用这样一个简单的程序吗

NodeList countries = (NodeList) xpath.evaluate("//countries/country",
    builder.parse(inputStream),
    XPathConstants.NODESET);

for (int i = 0; i < countries.getLength(); i++) {
    Node country = notes.item(i);
    String code = (String) xpath.evaluate("./code/text()", country,
        XPathConstants.STRING);
    String name = (String) xpath.evaluate("./country/text()", country, 
        XPathConstants.STRING);

    System.out.println(String.format("%s has country code %s", name, code));
}
输出

Canada has country code CA
France has country code FR
Italy has country code IT
United States has country code US

你不能用这样一个简单的程序吗

NodeList countries = (NodeList) xpath.evaluate("//countries/country",
    builder.parse(inputStream),
    XPathConstants.NODESET);

for (int i = 0; i < countries.getLength(); i++) {
    Node country = notes.item(i);
    String code = (String) xpath.evaluate("./code/text()", country,
        XPathConstants.STRING);
    String name = (String) xpath.evaluate("./country/text()", country, 
        XPathConstants.STRING);

    System.out.println(String.format("%s has country code %s", name, code));
}
输出

Canada has country code CA
France has country code FR
Italy has country code IT
United States has country code US

为什么不能直接使用
//country
?这是怎么回事?这是一个“国家”的列表。对不起,我错把Java放在那里了。这是使用JavaScript的客户端。为什么不能只使用
//country
?如何工作?这是一个“国家”的列表。对不起,我错把Java放在那里了。这是使用JavaScript的客户端。是的,这是Java。我需要用JavaScript在客户机上执行此操作。我只是尽量不选择换行符作为节点。你可以很容易地翻译成Javascript。请记住,如果选择//countries/*将获得所有子节点,包括dom元素和文本节点(您提到的换行符)。如果您对顶级国家元素感兴趣,根据我的示例,我无法理解//国家/国家有什么问题。是的,谢谢。你说得对。select*包含空格,但是如果我只是按照您指定的名称选择节点,那么它就可以正常工作。谢谢。您描述的内容就像使用XPath
/countries/node()
<代码>*应仅匹配元素,不会返回
text()
节点
/countries/*
/countries/country
应该为示例xml返回相同的元素集。@MadsHansen您似乎是对的。那么他的原始代码有什么问题吗?是的,那是Java。我需要用JavaScript在客户机上执行此操作。我只是尽量不选择换行符作为节点。你可以很容易地翻译成Javascript。请记住,如果选择//countries/*将获得所有子节点,包括dom元素和文本节点(您提到的换行符)。如果您对顶级国家元素感兴趣,根据我的示例,我无法理解//国家/国家有什么问题。是的,谢谢。你说得对。select*包含空格,但是如果我只是按照您指定的名称选择节点,那么它就可以正常工作。谢谢。您描述的内容就像使用XPath
/countries/node()
<代码>*应仅匹配元素,不会返回
text()
节点
/countries/*
/countries/country
应该为示例xml返回相同的元素集。@MadsHansen您似乎是对的。那么他的原始代码有什么问题?