第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從xml節(jié)點java生成/獲取XPath

從xml節(jié)點java生成/獲取XPath

函數(shù)式編程 2019-07-06 17:37:58
從xml節(jié)點java生成/獲取XPath我對建議感興趣偽碼代碼/解釋而不是實際執(zhí)行.我想使用xml文檔,它的所有節(jié)點檢查節(jié)點是否存在屬性如果節(jié)點沒有屬性,get/generate String with value of its xpath如果節(jié)點確實有屬性,那么可以迭代時隙屬性列表,并為每個屬性(包括節(jié)點)創(chuàng)建XPath。忠告?希望你能提供一些有用的情報編輯:這么做的原因是.。我正在用jmi編寫自動化測試,所以對于每個請求,我都需要驗證該請求是否完成了它的工作,所以我通過使用XPath獲取節(jié)點值來斷言結(jié)果。(額外的信息-無關(guān))當(dāng)請求很小時,手工創(chuàng)建斷言并不是問題,但對于較大的請求來說,這是一個真正痛苦的問題。(額外信息-無關(guān))賞金:我在找java方法目標(biāo)我的目標(biāo)是從這個ExXML文件中實現(xiàn)以下目標(biāo):<root>     <elemA>one</elemA>     <elemA attribute1='first' attribute2='second'>two</elemA>     <elemB>three</elemB>     <elemA>four</elemA>     <elemC>         <elemB>five</elemB>     </elemC></root>制作下列文件://root[1]/elemA[1]='one'//root[1]/elemA[2]='two'//root[1]/elemA[2][@attribute1='first']//root[1]/elemA[2][@attribute2='second'] //root[1]/elemB[1]='three'//root[1]/elemA[3]='four'//root[1]/elemC[1]/elemB[1]='five'解釋:如果節(jié)點值/文本不是空/零,則獲取XPath,為斷言目的添加=‘nodevalue’如果節(jié)點有屬性,那么也為它們創(chuàng)建斷言賞金更新:我找到了這個例子,它沒有產(chǎn)生正確的結(jié)果,但是我看起來如下所示:http:/www.coderanch.com/how-to/java/SAXCreateXPath
查看完整描述

3 回答

?
烙印99

TA貢獻(xiàn)1829條經(jīng)驗 獲得超13個贊

下面是如何使用SAX來完成這一任務(wù):

import java.util.HashMap;import java.util.Map;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.
sax.XMLReader;import org.xml.sax.helpers.DefaultHandler;public class FragmentContentHandler extends DefaultHandler {

    private String xPath = "/";
    private XMLReader xmlReader;
    private FragmentContentHandler parent;
    private StringBuilder characters = new StringBuilder();
    private Map<String, Integer> elementNameCount = new HashMap<String, Integer>();

    public FragmentContentHandler(XMLReader xmlReader) {
        this.xmlReader = xmlReader;
    }

    private FragmentContentHandler(String xPath, XMLReader xmlReader, FragmentContentHandler parent) {
        this(xmlReader);
        this.xPath = xPath;
        this.parent = parent;
    }

    @Override
    public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
        Integer count = elementNameCount.get(qName);
        if(null == count) {
            count = 1;
        } else {
            count++;
        }
        elementNameCount.put(qName, count);
        String childXPath = xPath + "/" + qName + "[" + count + "]";

        int attsLength = atts.getLength();
        for(int x=0; x<attsLength; x++) {
            System.out.println(childXPath + "[@" + atts.getQName(x) + "='" + atts.getValue(x) + ']');
        }

        FragmentContentHandler child = new FragmentContentHandler(childXPath, xmlReader, this);
        xmlReader.setContentHandler(child);
    }

    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        String value = characters.toString().trim();
        if(value.length() > 0) {
            System.out.println(xPath + "='" + characters.toString() + "'");
        }
        xmlReader.setContentHandler(parent);
    }

    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        characters.append(ch, start, length);
    }}

它可以通過以下方法進(jìn)行測試:

import java.io.FileInputStream;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.
sax.InputSource;import org.xml.sax.XMLReader;public class Demo {

    public static void main(String[] args) throws Exception {
        SAXParserFactory spf = SAXParserFactory.newInstance();
        SAXParser sp = spf.newSAXParser();
        XMLReader xr = sp.getXMLReader();

        xr.setContentHandler(new FragmentContentHandler(xr));
        xr.parse(new InputSource(new FileInputStream("input.xml")));
    }}

這將產(chǎn)生所需的輸出:

//root[1]/elemA[1]='one'//root[1]/elemA[2][@attribute1='first]//root[1]/elemA[2][@attribute2='second]//root[1]/elemA[2]='
two'//root[1]/elemB[1]='three'//root[1]/elemA[3]='four'//root[1]/elemC[1]/elemB[1]='five'


查看完整回答
反對 回復(fù) 2019-07-06
?
慕后森

TA貢獻(xiàn)1802條經(jīng)驗 獲得超5個贊

帶著jOOX(A)jQueryAPI端口到Java,免責(zé)聲明-我為庫后面的公司工作),您幾乎可以在一條語句中實現(xiàn)您想要的結(jié)果:

// I'm assuming this:import static org.joox.JOOX.$;// And then...List<String> coolList = $(document).xpath("//*[not(*)]").map(
    context -> $(context).xpath() + "='" + $(context).text() + "'");

如果文檔是您的示例文檔:

<root>
    <elemA>one</elemA>
    <elemA attribute1='first' attribute2='second'>two</elemA>
    <elemB>three</elemB>
    <elemA>four</elemA>
    <elemC>
        <elemB>five</elemB>
    </elemC></root>

這將產(chǎn)生

/root[1]/elemA[1]='one'
/root[1]/elemA[2]='two'
/root[1]/elemB[1]='three'
/root[1]/elemA[3]='four'
/root[1]/elemC[1]/elemB[1]='five'

所謂“幾乎”,我的意思是jOOX不支持匹配/映射屬性。因此,屬性不會產(chǎn)生任何輸出。不過,這將在不久的將來實施。


查看完整回答
反對 回復(fù) 2019-07-06
  • 3 回答
  • 0 關(guān)注
  • 885 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號