【问题标题】:split a string at a specific point till specific point using java [closed]使用java在特定点拆分字符串直到特定点[关闭]
【发布时间】:2021-07-16 10:00:30
【问题描述】:

我想拆分下面的字符串以获得预期的输出

<?xml version="1.0" encoding="UTF-8" ?>
<CompareInformation>
    <request>
        <OrderInformation>
            <CardTypeUsed>CreditCard</CardTypeUsed>
            <consumerId>GIF</consumerId>
        </OrderInformation>
    </request>
</CompareInformation>

预期输出

<OrderInformation>
            <CardTypeUsed>CreditCard</CardTypeUsed>
            <consumerId>GIF</consumerId>
        </OrderInformation>

【问题讨论】:

  • 分割的标准是什么?似乎它不是拆分而是子字符串,并且看起来您想要提取 XML 元素。
  • 我想从顶部和底部删除直到请求的所有请求
  • 这能回答你的问题吗? How to read XML using XPath in Java

标签: java xml


【解决方案1】:

对于这样的事情,您确实应该使用适当的 XML 解析库,但如果您必须这样做,那么在这里简单地使用拆分将不必要地复杂,因为拆分意味着,好吧,实际上用分隔符分割字符串是行不通的,因为这里有 两个 分隔符(&lt;OrderInformation&gt;&lt;/OrderInformation&gt;)。

你会想做这样的事情:

public static String extract(String input, String start, String end) {
    int length = end.length();
    int startIndex = input.indexOf(start);
    // because indexOf returns index of the first character found, 
    // we need to add the length of the "end" string to get the index of the last character.
    int endIndex = input.indexOf(end) + length;

    return input.substring(startIndex, endIndex);
}
String result = extract(in, "<OrderInformation>", "</OrderInformation>")

你可以阅读更多关于substring()here的信息。

请记住,如果&lt;OrderInformation&gt; 多次出现,此解决方案将不起作用。您需要手动搜索多个匹配项并返回某种数组。

【讨论】:

    【解决方案2】:

    我相信处理 XML 更适合 XML 库。要更改 XML,您可以使用 XSLT,它的好处是它也可以在 CLI 和其他工具和语言中使用而无需任何更改。 XSLT 正是为您的工作而构建的 - 转换 XML。

    如果您确定您将永远留在您的应用程序中,您当然也可以使用通用 Java XML 库。

    以下是您的用例示例:

    package org.example;
    
    import javax.xml.transform.*;
    import javax.xml.transform.stream.StreamResult;
    import javax.xml.transform.stream.StreamSource;
    import java.io.IOException;
    import java.io.StringReader;
    import java.io.StringWriter;
    import java.net.URISyntaxException;
    
    public class XSLTDemo {
    
    
        public static void main(String[] args) throws IOException, URISyntaxException, TransformerException {
            String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" +
                    "<CompareInformation>" +
                    "    <request>" +
                    "        <OrderInformation>" +
                    "            <CardTypeUsed>CreditCard</CardTypeUsed>"+
                    "            <consumerId>GIF</consumerId>"+
                    "        </OrderInformation>"+
                    "    </request>"+
                    "</CompareInformation>";
    
            String xsltStr = "<?xml version=\"1.0\"?>\n" +
                    "<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\n"+
                    "<xsl:output method=\"xml\" omit-xml-declaration=\"yes\" />\n" +
                    "    <xsl:template match=\"/\">\n" +
                    "            <xsl:copy-of select=\"/CompareInformation/node()\" />\n" +
                    "    </xsl:template>\n" +
                    "</xsl:stylesheet>";
    
            TransformerFactory factory = TransformerFactory.newInstance();
            Source xslt = new StreamSource(new StringReader(xsltStr));
            Transformer transformer = factory.newTransformer(xslt);
    
            Source text = new StreamSource(new StringReader(xml));
            StringWriter writer = new StringWriter();
            transformer.transform(text, new StreamResult(writer));
    
            System.out.println(writer.toString());
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-14
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 2019-01-11
      相关资源
      最近更新 更多