0

次のようなxmlがあるとします:

<alerts>
    <fullName>email_alert_campaign</fullName>
    <description>email alert campaign</description>
    <recipients>
        <recipient>abc_puv@xyz.com</recipient>
        <type>user</type>
    </recipients>
    <senderType>CurrentUser</senderType>
</alerts>
<tasks>
    <fullName>Task_on_completing_a_campaign</fullName>
    <assignedTo>abc_puv@xyz.com</assignedTo>
    <subject>Task on completing a campaign</subject>
</tasks>

XMLファイルには、「abc_puv@xyz.com」のようなデータがあり、Javaを使用して「XYZ」に置き換える必要があります。何百ものxmlを検索し、それに応じてデータに置き換えることができるJavaコードを記述する必要があります。

4

3 に答える 3

0

コード test.xml を試してください

<?xml version="1.0"?>
<root>
<alerts>
    <fullName>email_alert_campaign</fullName>
    <description>email alert campaign</description>
    <recipients>
        <recipient>abc_puv@xyz.com</recipient>
        <type>user</type>
    </recipients>
    <senderType>CurrentUser</senderType>
</alerts>
<tasks>
    <fullName>Task_on_completing_a_campaign</fullName>
    <assignedTo>abc_puv@xyz.com</assignedTo>
    <subject>Task on completing a campaign</subject>
</tasks>
</root>

public class XMLParsing {
    public static void main(String[] args) throws ParserConfigurationException,
            SAXException, IOException, XPathExpressionException, TransformerFactoryConfigurationError, TransformerException {
        File fXmlFile = new File("D:/test.xml");
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(fXmlFile);

        // optional, but recommended
        // read this -
        // http://stackoverflow.com/questions/13786607/normalization-in-dom-parsing-with-java-how-does-it-work
        doc.getDocumentElement().normalize();

        XPath xpath = XPathFactory.newInstance().newXPath(); 
        XPathExpression expr = xpath
                .compile("//assignedTo");
        Node node = (Node) expr.evaluate(doc, XPathConstants.NODE);
        System.out.println("Root element :"
                + node.getTextContent());
        node.setTextContent("abc_puv@efg.com");

        Transformer transformer = TransformerFactory.newInstance().newTransformer();
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");

        //initialize StreamResult with File object to save to file
        StreamResult result = new StreamResult(new StringWriter());
        DOMSource source = new DOMSource(doc);
        transformer.transform(source, result);

        String xmlString = result.getWriter().toString();
        System.out.println(xmlString);
    }
}
于 2013-06-12T11:57:15.803 に答える
0

( タグに従って) JAXB でこれを実行しようとしている場合、手順は次のとおりです。

  1. 必要に応じて標準の JAXB アノテーションを使用して、オブジェクト モデルを XML 構造にマップします。
  2. XML をオブジェクト モデルに非整列化します。
  3. 変更が必要な場合は、値を更新してください。
  4. モデルが変更された場合は、それを XML にマーシャリングします。
于 2013-06-12T12:11:24.740 に答える
0

たとえば、XSLT 変換を記述します。

<xsl:stylesheet ...>
  <xsl:template match="*">
    <xsl:copy><xsl:copy-of select="@*"/><xsl:apply-templates/></xsl:copy>
  </xsl:template>
  <xsl:template match="recipient|assignedTo">
    <xsl:copy><xsl:value-of select="replace(., 'abc_puv@xyz.com', 'XYZ')"/></xsl:copy>
  </xsl:template>
</xsl:stylesheet>

次に、(たとえば JAXP API を使用して) この変換を各 XML ドキュメントに適用します。

于 2013-06-12T15:14:56.420 に答える