使用java在特定点拆分字符串直到特定点

使用java在特定点拆分字符串直到特定点,java,xml,Java,Xml,我想拆分下面的字符串以获得预期的输出 <?xml version="1.0" encoding="UTF-8" ?> <CompareInformation> <request> <OrderInformation> <CardTypeUsed>CreditCard</CardTypeUsed> <consu

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

<?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>

信用卡
GIF
预期产量

<?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>

信用卡
GIF

对于类似的内容,您确实应该使用适当的XML解析库,但是如果您这样做,那么在这里简单地使用拆分将是不必要的复杂,因为拆分的目的是,按字面意思用分隔符拆分字符串,因为这里有两个分隔符(

您可能希望执行以下操作:

公共静态字符串提取(字符串输入、字符串开始、字符串结束){
int length=end.length();
int startIndex=input.indexOf(开始);
//因为indexOf返回找到的第一个字符的索引,
//我们需要添加“end”字符串的长度以获得最后一个字符的索引。
int endIndex=input.indexOf(end)+长度;
返回input.substring(startIndex,endIndex);
}
String result=extract(在“,”中)
您可以阅读有关
substring()
的更多信息


请记住,如果多次出现
,此解决方案将不起作用。您需要手动搜索多个实例并返回某种数组。

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

如果您确信自己将永远留在应用程序中,那么当然也可以使用一个通用的JavaXML库

以下是您的用例示例:

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());
    }
}
package org.example;
导入javax.xml.transform.*;
导入javax.xml.transform.stream.StreamResult;
导入javax.xml.transform.stream.StreamSource;
导入java.io.IOException;
导入java.io.StringReader;
导入java.io.StringWriter;
导入java.net.URISyntaxException;
公共类XSLTDemo{
publicstaticvoidmain(字符串[]args)抛出IOException、URISyntaxException、TransformerException{
字符串xml=“”+
"" +
"    " +
"        " +
“信用卡”+
“GIF”+
"        "+
"    "+
"";
字符串xsltStr=“\n”+
“\n”+
“\n”+
“\n”+
“\n”+
“\n”+
"";
TransformerFactory=TransformerFactory.newInstance();
Source xslt=newstreamsource(newstringreader(xsltStr));
变压器=工厂新变压器(xslt);
源文本=新的StreamSource(新的StringReader(xml));
StringWriter编写器=新的StringWriter();
transform(文本,新的StreamResult(writer));
System.out.println(writer.toString());
}
}

拆分的标准是什么?看起来它不是拆分的,而是子字符串,看起来您想提取一个XML元素。我想从顶部和底部删除所有请求,从底部删除所有请求。这是否回答了您的问题?