有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JAVA用于拆分XML参数的split()方法

我从一个XML文档中得到这句话:

<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" contentScriptType="text/ecmascript" width="1024" zoomAndPan="magnify" contentStyleType="text/css" viewBox="0 0 1024 768" height="768" preserveAspectRatio="xMidYMid meet" version="1.0">

我希望能够使用拆分方法将其拆分。例如,我想将每个参数保存到一个字符串数组中

所以我想:

contentScriptType="text/ecmascript" 
width="1024" 
zoomAndPan="magnify" 
contentStyleType="text/css" 
viewBox="0 0 1024 768" 
height="768"

etc等保存到字符串数组中,是否有任何方法可以使用split方法进行此操作,或者有人可以建议一种更简单、更有效的方法来进行此操作

下面是一个看起来很吓人的正则表达式:

\s(.*?)\s?=(?:(?:\\[,"']|[^,"'])+|"(?:\\"|[^"])*(?<!\\)"|'[^']*'|)

Eclipse不会接受这个错误,因为它有无效的字符常量,有人知道如何克服这个错误吗


共 (1) 个答案

  1. # 1 楼答案

    有多种方法可以表示同一个XML文档(见下文),空格和引号中的差异会使编写(和维护)正则表达式变得困难

    输入。xml(表示法1)

    <?xml version="1.0" encoding="UTF-8"?>
    <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" contentScriptType="text/ecmascript" width="1024" zoomAndPan="magnify" contentStyleType="text/css" viewBox="0 0 1024 768" height="768" preserveAspectRatio="xMidYMid meet" version="1.0">
    

    输入。xml(表示法2)

    <?xml version="1.0" encoding="UTF-8"?>
    <svg 
         xmlns:xlink = 'http://www.w3.org/1999/xlink'
         xmlns = 'http://www.w3.org/2000/svg' 
         contentScriptType = 'text/ecmascript' 
         width = '1024'
         zoomAndPan = 'magnify'
         contentStyleType = 'text/css'
         viewBox = '0 0 1024 768'
         height = '768'
         preserveAspectRatio = 'xMidYMid meet'
         version = '1.0'>
    

    我建议使用XML解析器。下面是如何使用StAX (JSR-173)实现的。Java SE 6中包含了一个StAX解析器的实现

    演示

    package forum12193899;
    
    import java.io.StringReader;
    
    import javax.xml.stream.*;
    import javax.xml.transform.stream.StreamSource;
    
    public class Demo {
    
        public static void main(String[] args) throws Exception {
            XMLInputFactory xif = XMLInputFactory.newFactory();
            StreamSource xml = new StreamSource("src/forum12193899/input.xml");
    
            String xmlString = "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns=\"http://www.w3.org/2000/svg\" contentScriptType=\"text/ecmascript\" width=\"1024\" zoomAndPan=\"magnify\" contentStyleType=\"text/css\" viewBox=\"0 0 1024 768\" height=\"768\" preserveAspectRatio=\"xMidYMid meet\" version=\"1.0\">";
            XMLStreamReader xsr = xif.createXMLStreamReader(new StringReader(xmlString));
    
            xsr.nextTag(); // Advance to "svg" element.
            int attributeCount = xsr.getAttributeCount();
            String[] array = new String[attributeCount];
            for(int x=0; x<attributeCount; x++) {
                StringBuilder stringBuilder = new StringBuilder();
                array[x]= xsr.getAttributeLocalName(x) + "=\"" + xsr.getAttributeValue(x) + "\"";
            }
    
            // Output the Array
            for(String string : array) {
                System.out.println(string);
            }
        }
    
    }
    

    输出

    contentScriptType="text/ecmascript"
    width="1024"
    zoomAndPan="magnify"
    contentStyleType="text/css"
    viewBox="0 0 1024 768"
    height="768"
    preserveAspectRatio="xMidYMid meet"
    version="1.0"