Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

Diskuze: Vyhledání a nahrazení elementu v XML přes xPath

Java Java Vyhledání a nahrazení elementu v XML přes xPath

Aktivity (1)
Avatar
zoubek.s
Člen
Avatar
zoubek.s:3.10.2014 12:02

Ahoj,

potřeboval bych poradit jak v XML, přes xPath najít konkrétní element a nahradit jej jiným elementem. V XML mám 3 elementy <w:sdt> a každý element obsahuje potomky <w:r> ve kterém je další element <w:t>.
V elementu <w:sdt> je element s atributem <w:tag w:val="P{1}"/> a podle hodnoty tohoto atributu potřebuji najít ten správný <w:sdt> element.
Dále v elementu <w:r> potřebuji nějak změnit hodnotu v elementu <w:t>. Nějak přepsat hodnotu P1 na něco jiného.
Jakmile dojde k přepsání hodnoty v elemetu <w:t>, tak nahradit celý element <w:sdt> za ten element <w:r> i s podlemenenty.

Má zatím vytvořenou smyčku na vyhledání všech elementů <w:sdt>, ale dál se nemohu hnout z místa.

Můžete mi pls někdo poradit? Předem moc děkuji.

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setValidating(false);
DocumentBuilder db = dbf.newDocumentBuilder();

Document doc = db.parse(new FileInputStream(new File("document.xml")));

XPathFactory factory = XPathFactory.newInstance();

XPath xpath = factory.newXPath();

String expression;
String expression2;
NodeList nodeList;
String hodnotaTagu = null;

expression = "//*[name()='w:sdt']";
nodeList = (NodeList) xpath.evaluate(expression, doc, XPathConstants.NODESET);
    for (int i = 0; i < nodeList.getLength(); i++) {

            System.out.println("w:sdt = " + nodeList.item(i).getNodeName() + " ");
    }

zde je část XML s celám elementem <w:sdt>:

<w:sdt>
    <w:sdtPr>
        <w:rPr>
            <w:b/>
        </w:rPr>
        <w:tag w:val="P{1}"/>
        <w:id w:val="-1130393001"/>
        <w:placeholder>
            <w:docPart w:val="DefaultPlaceholder_1082065158"/>
        </w:placeholder>
        <w:text/>
    </w:sdtPr>
    <w:sdtEndPr/>
    <w:sdtContent>
        <w:r w:rsidR="00EE5C6A" w:rsidRPr="00DD548A">
            <w:rPr>
                <w:b/>
            </w:rPr>
            <w:t>P1</w:t>
        </w:r>
    </w:sdtContent>
</w:sdt>
 
Odpovědět 3.10.2014 12:02
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 1 zpráv z 1.