Положение элемента в узле Java - PullRequest
0 голосов
/ 16 сентября 2018

предположим, что у нас есть этот узел в xml:

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

Я хочу повторить, используя Java, этот узел, а затем для каждого элемента, который я хочу показать, он находится в этом узле.

В этом случае вывод должен быть: имя: позиция 0, lastName: позиция 1

Спасибо!

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Вы можете использовать XSLT из Java, чтобы получить желаемый результат. Для этого создайте следующие файлы:

Назовите ваш входной файл 'input.xml':

<?xml version="1.0" encoding="UTF-8"?>
<person>
   <name>Name</name>
   <lastName>LastName</lastName>
</person>

Создать файл transform.xslt:

<?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>

И использовать файл Java из этого SO ответа :

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 (т.е. вот так):

javac TestMain.java
java  TestMain

Теперь файл output.text содержит нужный текст.

0 голосов
/ 16 сентября 2018

Вы должны быть в состоянии получить все узлы в некотором наборе или модели дерева.Я привык к Json, но XML должен быть похожим в этом отношении.Вы должны выполнять итерацию, получая объект итератора и вызывая withIndex (), а затем вызывая forEach.Вам будут даны объекты типа IndexedValue, где T - это тип, который вы перебираете.Или вы можете использовать встроенную в Kotlins функцию расширения «forEachIndexed», которая даст вам два параметра: index, value.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...