Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.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_Java_Xpath - Fatal编程技术网

节点中的元素位置,java

节点中的元素位置,java,java,xpath,Java,Xpath,假设我们在xml中有此节点: <person> <name>Name</name> <lastName>LastName</lastName> </person> 名称 姓氏 我想使用Java迭代到那个节点,然后对于每个元素,我想显示他在那个节点中的位置 在这种情况下,输出应为: 姓名:职位0, 姓氏:职位1 谢谢 您应该能够获得某种集合或树模型中的所有节点。我习惯使用Json,但XML在这方面应该类似。您

假设我们在xml中有此节点:

<person>
   <name>Name</name>
   <lastName>LastName</lastName>
</person>

名称
姓氏
我想使用Java迭代到那个节点,然后对于每个元素,我想显示他在那个节点中的位置

在这种情况下,输出应为: 姓名:职位0, 姓氏:职位1


谢谢

您应该能够获得某种集合或树模型中的所有节点。我习惯使用Json,但XML在这方面应该类似。您应该通过获取迭代器对象并调用“withIndex()”进行迭代,然后调用forEach。您将获得IndexedValue类型的对象,其中T是您正在迭代的类型。或者您可以使用Kotlins内置的扩展函数“forEachIndexed”,它将为您提供两个参数:index,value。

您可以使用Java中的XSLT获得所需的输出。为此,请创建以下文件:

将输入文件命名为“input.xml”:

<?xml version="1.0" encoding="UTF-8"?>
<person>
   <name>Name</name>
   <lastName>LastName</lastName>
</person>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="yes" />

  <xsl:template match="/person">
    <xsl:for-each select="*">
        <xsl:value-of select="concat(name(),': position ',position()-1)" />
        <xsl:if test="position() != last()">, </xsl:if>        
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>
import javax.xml.transform.*;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;

public class TestMain {
    public static void main(String[] args) throws IOException, URISyntaxException, TransformerException {
        TransformerFactory factory = TransformerFactory.newInstance();
        Source xslt = new StreamSource(new File("transform.xslt"));
        Transformer transformer = factory.newTransformer(xslt);

        Source text = new StreamSource(new File("input.xml"));
        transformer.transform(text, new StreamResult(new File("output.text")));
    }
}
然后执行Java代码(如下图所示):

现在,
output.text
文件包含所需的文本

javac TestMain.java
java  TestMain