NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
Mezinárodní den IT společnosti je tady! Pouze nyní můžeš získat 90 % extra kreditů při nákupu od 1199 kreditů s promo kódem AJTACI90. Tak neváhej!

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

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Jak se ti líbí článek?
Před uložením hodnocení, popiš prosím autorovi, co je špatněZnaků 0 z 50-500
Jak se ti kurz líbí?
Tvé hodnocení kurzuZnaků 0 z 50-500
Aktivity
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.