Avatar
zoubek.s
Člen
Avatar
zoubek.s:

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.