JAVA代码片段将整个XML文件中的单引号(')替换为双引号

Kashyap Savsani

我有一个带有嵌套标签的XML文件。我们可以使用DOM,JDOM解析器,我想在整个XML文件中的所有标记的字符串中替换从单引号(')到双引号的字符串。标签也可以嵌套在标签内。我想要一些for循环来查找所有标签并替换值,例如HYPER SHIPPING'SDN BHD_First_Page-> HYPER SHIPPING''SDN BHD_First_Page

样例代码

    public void iterateChildNodes(org.jdom.Element parentNode) {
        if(parentNode.getChildren().size() == 0) {
            if(parentNode.getText().contains("'")) {
                parentNode.setText(parentNode.getText().replaceAll("'", "\'"));
                LOGGER.info("*************  Below Value updated");
                LOGGER.info(parentNode.getText());
            }
        }else {
            List<Element> rec = parentNode.getChildren();
            for(Element i : rec) {
                iterateChildNodes(i);
            }
        }
    }

样本XML文件

    <Document>
        <Identifier>DOC1</Identifier>
        <Type>HYPER SHIPPING SDN BHD</Type>
        <Description>HYPER SHIPPING SDN BHD</Description>
        <Confidence>33.12</Confidence>
        <ConfidenceThreshold>10.0</ConfidenceThreshold>
        <Valid>true</Valid>
        <Reviewed>true</Reviewed>
        <ReviewedBy>SYSTEM</ReviewedBy>
        <ValidatedBy>SYSTEM</ValidatedBy>
        <ErrorMessage/>
        <Value>HYPER SHIPPING'SDN BHD_First_Page</Value>  //Value to be replaced here
        <DocumentDisplayInfo/>
        <DocumentLevelFields/>
        <Pages>
            <Page>
                <Identifier>PG0</Identifier>
                <OldFileName>HYPER-KL FEB-0001-0001.tif</OldFileName>
                <NewFileName>BI2E7_0.tif</NewFileName>
                <SourceFileID>1</SourceFileID>
                <PageLevelFields>
                    <PageLevelField>
                        <Name>Search_Engine_Classification</Name>
                        <Value>Park Street '10 road</Value>     //Value to be replaced here
                        <Type/>
                        <Confidence>66.23</Confidence>
                        <LearnedFileName>HYPER KL-JUN-0001.tif</LearnedFileName>
                        <OcrConfidenceThreshold>0.0</OcrConfidenceThreshold>
                        <OcrConfidence>0.0</OcrConfidence>
                        <FieldOrderNumber>0</FieldOrderNumber>
                        <ForceReview>false</ForceReview>
                    </PageLevelField>
                </PageLevelFields>
            </Page>
        </Pages>
    </Document>
Kawser Habib博士

此代码可以取代所有'"从XML文件。

在此处未添加描述,请尝试逐步进行编码。这很容易理解。

(更新)

Part 1: Using JDOM

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.w3c.dom.NodeList;
import org.jdom2.input.SAXBuilder;
import org.jdom2.transform.JDOMSource;
import org.w3c.dom.*;


import java.io.*;

public class XmlParse {

    public static void main(String[] args) {
        XmlParse xmlParse = new XmlParse();
        // xmlParse.xmlToObj();
        xmlParse.updateXmlAndSaveJDom();

    }
    
    public void updateXmlAndSaveJDom() {
        try {
            File inputFile = new File("document.xml");
            SAXBuilder saxBuilder = new SAXBuilder();
            org.jdom2.Document doc = saxBuilder.build(inputFile);
            org.jdom2.Element classElement = doc.getRootElement();

            iterateChildNodesJDom(classElement);

            writeXMLJDom(doc);

        } catch (Exception ex) {
            ex.printStackTrace();
        }

    }
    
    public void writeXMLJDom(org.jdom2.Document doc) throws Exception {
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        JDOMSource source = new JDOMSource(doc);
        StreamResult result = new StreamResult(new File("updated-document-jdom.xml"));
        transformer.transform(source, result);
    }
    
    public void iterateChildNodesJDom(org.jdom2.Element e) {
        
        if(e.getChildren().size() == 0) {
            System.out.println(e.getName() + ","+ e.getText());
            if(e.getText().contains("'")) {
                e.setText(e.getText().replaceAll("\'", "\""));
            }
        }else {
            System.out.println(e.getName());
            for(org.jdom2.Element i: e.getChildren()) {
                    iterateChildNodesJDom(i);
            }
        }

    }
}

Part 2: Using DOM

import java.util.ArrayList;
import java.util.List;

import org.w3c.dom.NodeList;
import org.w3c.dom.*;
import javax.xml.parsers.*;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import java.io.*;

public class XmlParse {

    public static void main(String[] args) {
        XmlParse xmlParse = new XmlParse();
        xmlParse.updateXmlAndSave();

    }

    public void updateXmlAndSave() {
        try {
            File inputFile = new File("document.xml");
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(inputFile);
            doc.getDocumentElement().normalize();
            
            Node parentNode = doc.getFirstChild();
            iterateChildNodes(parentNode);
            
            writeXML(doc);
            
        } catch (Exception ex) {
            ex.printStackTrace();
        }

    }
    
    //create new xml file with updated value
    public void writeXML(Document doc) throws Exception{
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        DOMSource source = new DOMSource(doc);
        StreamResult result = new StreamResult(new File("updated-document.xml"));
        transformer.transform(source, result);
    }
    
    public void iterateChildNodes(Node parentNode) {
        
        NodeList nodeList = parentNode.getChildNodes();
        
        for (int temp = 0; temp < nodeList.getLength(); temp++) {
            Node node = nodeList.item(temp);
            if (node.getNodeType() == Node.ELEMENT_NODE) {
               Element element = (Element) node;
               //System.out.print(element.getNodeName());
               
               if(element.hasChildNodes() && element.getChildNodes().getLength() > 1) {
                   //System.out.println("Child > "+element.getNodeName());
                   iterateChildNodes(element);
               }else {
                   //System.out.println(" - "+element.getTextContent());
                   if(element.getTextContent().contains("'")) {
                       String str = element.getTextContent().replaceAll("\'", "\"");
                       //update Node value
                       element.setTextContent(str);
                   }
               }
               
            }
         }
    }
}

输入文件document.xml

<Document>
        <Identifier>DOC1</Identifier>
        <Type>HYPER SHIPPING SDN BHD</Type>
        <Description>HYPER SHIPPING SDN BHD</Description>
        <Confidence>33.12</Confidence>
        <ConfidenceThreshold>10.0</ConfidenceThreshold>
        <Valid>true</Valid>
        <Reviewed>true</Reviewed>
        <ReviewedBy>SYSTEM</ReviewedBy>
        <ValidatedBy>SYSTEM</ValidatedBy>
        <ErrorMessage/>
        <Value>HYPER SHIPPING'SDN BHD_First_Page</Value>  //Value to be replaced here
        <DocumentDisplayInfo/>
        <DocumentLevelFields/>
        <Pages>
            <Page>
                <Identifier>PG0</Identifier>
                <OldFileName>HYPER-KL FEB-0001-0001.tif</OldFileName>
                <NewFileName>BI2E7_0.tif</NewFileName>
                <SourceFileID>1</SourceFileID>
                <PageLevelFields>
                    <PageLevelField>
                        <Name>Search_Engine_Classification</Name>
                        <Value>Park Street '10 road</Value>     //Value to be replaced here
                        <Type/>
                        <Confidence>66.23</Confidence>
                        <LearnedFileName>HYPER KL-JUN-0001.tif</LearnedFileName>
                        <OcrConfidenceThreshold>0.0</OcrConfidenceThreshold>
                        <OcrConfidence>0.0</OcrConfidence>
                        <FieldOrderNumber>0</FieldOrderNumber>
                        <ForceReview>false</ForceReview>
                    </PageLevelField>
                </PageLevelFields>
            </Page>
        </Pages>
</Document>

输出updated-document.xml/updated-document-jdom.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Document>
        <Identifier>DOC1</Identifier>
        <Type>HYPER SHIPPING SDN BHD</Type>
        <Description>HYPER SHIPPING SDN BHD</Description>
        <Confidence>33.12</Confidence>
        <ConfidenceThreshold>10.0</ConfidenceThreshold>
        <Valid>true</Valid>
        <Reviewed>true</Reviewed>
        <ReviewedBy>SYSTEM</ReviewedBy>
        <ValidatedBy>SYSTEM</ValidatedBy>
        <ErrorMessage/>
        <Value>HYPER SHIPPING"SDN BHD_First_Page</Value><DocumentDisplayInfo/>
        <DocumentLevelFields/>
        <Pages>
            <Page>
                <Identifier>PG0</Identifier>
                <OldFileName>HYPER-KL FEB-0001-0001.tif</OldFileName>
                <NewFileName>BI2E7_0.tif</NewFileName>
                <SourceFileID>1</SourceFileID>
                <PageLevelFields>
                    <PageLevelField>
                        <Name>Search_Engine_Classification</Name>
                        <Value>Park Street "10 road</Value><Type/>
                        <Confidence>66.23</Confidence>
                        <LearnedFileName>HYPER KL-JUN-0001.tif</LearnedFileName>
                        <OcrConfidenceThreshold>0.0</OcrConfidenceThreshold>
                        <OcrConfidence>0.0</OcrConfidence>
                        <FieldOrderNumber>0</FieldOrderNumber>
                        <ForceReview>false</ForceReview>
                    </PageLevelField>
                </PageLevelFields>
            </Page>
        </Pages>
</Document>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

替换字符串中的单引号和双引号

如何在JavaScript中将单引号替换为双引号?

curl在bash中将双引号替换为单引号

用引号替换双引号

用双引号替换.toString()单引号

如何将反斜杠双引号替换为仅双引号?

将外部单引号(')替换为双(“),将内部双引号(”)替换为单qoutes(')

从VBA中的CSV文件加载数据期间,将2个双引号替换为1个双引号

字符串将双引号替换为大括号

替换嵌套的双引号

如何在Robot Framework中将单引号(')替换为双引号(“)?

javascript将双引号替换为单引号

使用vb.net将单引号替换为双引号

使用REGEX将单引号替换为域周围的双引号

groovy用单引号和双引号替换双引号

用双引号将每个逗号替换为管道

用双引号将正斜杠替换为反斜杠

将JSON转换为Python Dictionaries会将双引号替换为单引号,并在每个双引号打开实例之前添加一个“ u”

用括号将双引号替换为单引号

用awk将双引号替换为双引号

从双引号替换为单引号时从终端sed

将双引号替换为空字符串

将 alt 属性的引号替换为双引号

用双引号替换单引号php

将双引号替换为单引号?

如何将双引号替换为 VBScript 中的空格?

使用正则表达式在 Python 中将转义的双引号替换为单引号

用单引号替换双引号

如何使用搜索(Ctrl + Shift + F)按钮在 vs 代码中将单引号替换为双引号?