【问题标题】:jQuery Search for start tag and end tag in stringjQuery在字符串中搜索开始标签和结束标签
【发布时间】:2015-04-23 10:34:45
【问题描述】:

我在一个字段中有以下数据字符串,我怎样才能使用 jquery 只检索从这个标签“<?xml version="1.0"?>”到这个标签</soap:Envelope>的所有内容

mylog.log:[qa53jdn575dganqmnen5a6irh4;OWI5MjFhMmI0NDk2NmYzNGNlNjcxOTg4NGRmMDExZGM=;1] INFO 2015-04-20 12:21:00,584 e.t.g.n.crm 
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

    <soap:Body>
        <webservice>
            <sessiontoken>admin</sessiontoken>
            <name>test</name>
            <id>12345</id>
            <parameters>
                <parameter>
                    <key>e</key>
                    <value>test2</value>
                    <type>string</type>
                    <length>90</length>
                </parameter>
                <parameter>
                    <key>a</key>
                    <value>test1</value>
                    <type>string</type>
                    <length>50</length>
                </parameter>
                <parameter>
                    <key>n</key>
                    <value>12345</value>
                    <type>string</type>
                    <length>90</length>
                </parameter>
                <parameter>
                    <key>s</key>
                    <value>3</value>
                </parameter>
                <parameter>
                    <key>sf</key>
                    <value>test5</value>
                    <type>string</type>
                    <length>50</length>
                </parameter>
                <parameter>
                    <key>u</key>
                    <value>test6</value>
                    <type>string</type>
                    <length>50</length>
                </parameter>
            </parameters>
        </webservice>
    </soap:Body> 
</soap:Envelope> 

这样它就会返回:

<?xml version="1.0"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<soap:Body>
    <webservice>
        <sessiontoken>admin</sessiontoken>
        <name>test</name>
        <id>12345</id>
        <parameters>
            <parameter>
                <key>e</key>
                <value>test2</value>
                <type>string</type>
                <length>90</length>
            </parameter>
            <parameter>
                <key>a</key>
                <value>test1</value>
                <type>string</type>
                <length>50</length>
            </parameter>
            <parameter>
                <key>n</key>
                <value>12345</value>
                <type>string</type>
                <length>90</length>
            </parameter>
            <parameter>
                <key>s</key>
                <value>3</value>
            </parameter>
            <parameter>
                <key>sf</key>
                <value>test5</value>
                <type>string</type>
                <length>50</length>
            </parameter>
            <parameter>
                <key>u</key>
                <value>test6</value>
                <type>string</type>
                <length>50</length>
            </parameter>
        </parameters>
    </webservice>
</soap:Body>

【问题讨论】:

    标签: javascript jquery xml soap


    【解决方案1】:
    var start = '<?xml version="1.0"?>';
    var end = '</soap:Envelope>';
    
    var text = 'mylog.log:[qa53jdn575dganqmnen5a6irh4;OWI5MjFhMmI0NDk2NmYzNGNlNjcxOTg4NGRmMDExZGM=;1] INFO 2015-04-20 12:21:00,584 e.t.g.n.crm <?xml version="1.0"?>...</soap:Envelope>';
    
    var startIndex = text.indexOf(start);
    var endIndex = text.indexOf(end);
    var innerText = text.slice(startIndex, endIndex);
    

    Here is the fiddle

    【讨论】:

    • 说在文本变量中,你有多个开始和结束标签,你将如何遍历它们
    • 我会为标签创建一个正则表达式来遍历所有标签
    【解决方案2】:
    var longstring = 'mylog.log:[qa53jdn575dganqmnen5a6irh4;OWI5MjFhMmI0NDk2NmYzNGNlNjcxOTg4NGRmMDExZGM=;1] INFO 2015-04-20 12:21:00,584 e.t.g.n.crm <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body> <webservice> <sessiontoken>admin</sessiontoken> <name>test</name> <id>12345</id> <parameters> <parameter> <key>e</key> <value>test2</value> <type>string</type> <length>90</length> </parameter> <parameter> <key>a</key> <value>test1</value> <type>string</type> <length>50</length> </parameter> <parameter> <key>n</key> <value>12345</value> <type>string</type> <length>90</length> </parameter> <parameter> <key>s</key> <value>3</value> </parameter> <parameter> <key>sf</key> <value>test5</value> <type>string</type> <length>50</length> </parameter> <parameter> <key>u</key> <value>test6</value> <type>string</type> <length>50</length> </parameter> </parameters> </webservice> </soap:Body> </soap:Envelope>'
    

    然后

    var substring = longstring.substr(longstring.indexOf('<?xml'),longstring.length); 
    

    【讨论】:

    • 这不起作用,如果&lt;/soap:Envelope&gt;后面有更多文字
    【解决方案3】:

    你甚至不需要 jquery。您可以使用正则表达式来提取模式。

    类似

    var yourString = "sdfsdfsdf ?xml version="1.0"?> </soap:Body>"
    var x = /<?xml(.+)</soap:Body>+/;
    var matches = x.match(yourString);
    

    【讨论】:

    • 这是评论而非答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-12
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    • 2012-04-01
    相关资源
    最近更新 更多