2016-03-29 15 views
1

私は新しいGraphMLファイルに、ラベルが ":User"であるノード要素だけを抽出しようとしています。例えば、私はこの部分graphmlありますXSLT - GraphMLから別のGraphMLに必要な要素だけをコピーする

<?xml version="1.0" encoding="UTF-8"?> 
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd"> 
<graph id="G" edgedefault="directed"> 
<node id="n207" labels=":Label"><data key="labels">:Label</data><data key="ksh">Belgien</data><data key="ps">بلجیم</data><data key="pt">Bélgica</data><data key="tum">Belgium</data><data key="xmf">ბელგია</data><data key="bar">Bäigien</data><data key="pms">Belgi</data><data key="sco">Belgium</data><data key="scn">Belgiu</data><data key="ext">Bélgica</data><data key="lez">Бельгия</data><data key="tet">Béljika</data><data key="qu">Bilhika</data><data key="af">België</data><data key="pnb">بیلجیم</data><data key="am">ቤልጅግ</data><data key="an">Belchica</data><data key="cdo">Bī-lé-sì</data><data key="ar">بلجيكا</data><data key="stq">Belgien</data><data key="jbo">beldjym</data><data key="mhr">Бельгий</data><data key="pnt">Βέλγιον</data><data key="ay">Bilkiya</data><data key="az">Belçika</data><data key="rm">Belgia</data><data key="rn">Ububirigi</data><data key="ro">Belgia</data><data key="ba">Бельгия</data><data key="ceb">Belhika</data><data key="ru">Бельгия</data><data key="be">Бельгія</data><data key="bg">Белгия</data><data key="rw">Ububiligi</data><data key="sr-ec">Белгија</data><data key="zh-mo">比利時</data><data key="bh">बेल्जियम</data><data key="bi">Belgium</data><data key="bcl">Belhika</data><data key="bm">Bɛliziki</data><data key="myv">Бельгия Мастор</data><data key="bn">বেলজিয়াম</data><data key="zh-my">比利时</data><data key="bo">པེར་ཅིན།</data><data key="sa">बेल्जियम्</data><data key="br">Belgia</data><data key="sc">Bèlgiu</data><data key="bs">Belgija</data><data key="se">Belgia</data><data key="arc">ܒܠܓܝܩܐ</data><data key="sg">Bêleze</data><data key="sh">Belgija</data><data key="si">බෙල්ජියම</data><data key="sk">Belgicko</data><data key="sl">Belgija</data><data key="sn">Belgium</data><data key="so">Beljim</data><data key="sr-el">Belgija</data><data key="ca">Bèlgica</data><data key="sq">Belgjika</data><data key="sr">Белгија</data><data key="ss">IBhelijiyamu</data><data key="mzn">بلژیک</data><data key="ce">Бельги</data><data key="su">Bélgia</data><data key="sv">Belgien</data><data key="sw">Ubelgiji</data><data key="zh-hant">比利時</data><data key="zh-hans">比利时</data><data key="arz">بلجيكا</data><data key="co">Belgica</data><data key="ta">பெல்ஜியம்</data><data key="cs">Belgie</data><data key="te">బెల్జియం</data><data key="cu">Бєлгїѥ</data><data key="cv">Бельги</data><data key="tg">Белгия</data><data key="th">ประเทศเบลเยียม</data><data key="bug">Belgia</data><data key="cy">Gwlad Belg</data><data key="tk">Belgiýa</data><data key="tl">Belgium</data><data key="vls">België</data><data key="da">Belgien</data><data key="tr">Belçika</data><data key="tt">Бельгия</data><data key="de">Belgien</data><data key="be-tarask">Бэльгія</data><data key="ace">Bèlgia</data><data key="ast">Bélxica</data><data key="rue">Белґія</data><data key="tw">Belgium</data><data key="ty">Peretita</data><data key="rup">Belghia</data><data key="lij">Belgio</data><data key="diq">Belçıka</data><data key="dv">ބެލްޖިއަމް</data><data key="ug">بېلگىيە</data><data key="hak">Pí-li-sṳ̀</data><data key="dz">བེལ་ཇིཡམ</data><data key="uk">Бельгія</data><data key="zea">Belhië</data><data key="pag">Belhika</data><data key="liv">Beļgij</data><data key="lzh">比利時</data><data key="crh-latn">Belçika</data><data key="pam">Belgika</data><data key="ur">بلجئیم</data><data key="sgs">Belgėjė</data><data key="pap">Bélgika</data><data key="de-ch">Belgien</data><data key="haw">Pelekiuma</data><data key="ee">Belgium</data><data key="xal">Бельҗмудин Нутг</data><data key="uz">Belgiya</data><data key="el">Βέλγιο</data><data key="en">Belgium</data><data key="eo">Belgio</data><data key="chr">ᏇᎵᏥᎥᎻ</data><data key="es">Bélgica</data><data key="et">Belgia</data><data key="eu">Belgika</data><data key="vi">Bỉ</data><data key="hsb">Belgiska</data><data key="vo">Belgän</data><data key="fa">بلژیک</data><data key="ff">Beljik</data><data key="fi">Belgia</data><data key="eml">Bélgi</data><data key="yue">比利時</data><data key="fo">Belgia</data><data key="wa">Beldjike</data><data key="fr">Belgique</data><data key="gag">Belgiya</data><data key="pcd">Bergike</data><data key="fy">Belgje</data><data key="nov">Belgia</data><data key="wo">Belsik</data><data key="ga">An Bheilg</data><data key="bxr">Бельги</data><data key="gd">A' Bheilg</data><data key="szl">Belgijo</data><data key="gl">Bélxica</data><data key="zh-hk">比利時</data><data key="tokipona">ma Pesije</data><data key="pt-br">Bélgica</data><data key="gn">Véyhika</data><data key="war">Belhika</data><data key="pdc">Belgien</data><data key="gu">બેલ્જિયમ</data><data key="gv">Yn Velg</data><data key="cbk-zam">Bélgica</data><data key="ha">Beljik</data><data key="ckb">بەلجیکا</data><data key="he">בלגיה</data><data key="hi">बेल्जियम</data><data key="hr">Belgija</data><data key="gsw">Belgie</data><data key="ht">Bèljik</data><data key="hu">Belgium</data><data key="lmo">Belgi</data><data key="yi">בעלגיע</data><data key="hy">Բելգիա</data><data key="nah">Belgica</data><data key="yo">Bẹ́ljíọ̀m</data><data key="ia">Belgica</data><data key="nan">Belgien</data><data key="id">Belgia</data><data key="ie">Belgia</data><data key="nap">Belge</data><data key="frp">Bèlg·ique</data><data key="io">Belgia</data><data key="frr">Bälgien</data><data key="nrm">Belgique</data><data key="is">Belgía</data><data key="it">Belgio</data><data key="zh">比利时</data><data key="vro">Belgiä</data><data key="ja">ベルギー</data><data key="pfl">Belgje</data><data key="sma">Belgia</data><data key="azb">بلژیک</data><data key="jv">Bèlgia</data><data key="ka">ბელგია</data><data key="wuu">比利时</data><data key="kg">Belezi</data><data key="kk">Бельгия</data><data key="kl">Belgia</data><data key="ko">벨기에</data><data key="nds-nl">België</data><data key="zh-tw">比利時</data><data key="ku">Belgiya</data><data key="kv">Бельгия</data><data key="kw">Pow Belg</data><data key="tpi">Beljiam</data><data key="ky">Бельгия</data><data key="la">Belgica</data><data key="lb">Belsch</data><data key="nds">Belgien</data><data key="li">Belsj</data><data key="fur">Belgjo</data><data key="ln">Bɛ́ljika</data><data key="lo">ປະເທດແບນຊິກ</data><data key="hif">Belgium</data><data key="koi">Белгия</data><data key="lt">Belgija</data><data key="lv">Beļģija</data><data key="zh-cn">比利时</data><data key="lad">Beljika</data><data key="pih">Beljum</data><data key="roa-tara">Bèlge</data><data key="vec">Belgio</data><data key="mg">Belzika</data><data key="mi">Pehiamu</data><data key="lrc">بلجیک</data><data key="mk">Белгија</data><data key="ml">ബെൽജിയം</data><data key="rmy">Beljiya</data><data key="vep">Bel'gii</data><data key="mn">Бельги</data><data key="new">बेल्जियम</data><data key="mr">बेल्जियम</data><data key="ms">Belgium</data><data key="mt">Belġju</data><data key="my">ဘယ်လ်ဂျီယမ်နိုင်ငံ</data><data key="ilo">Belhika</data><data key="mdf">Бельгие</data><data key="dsb">Belgiska</data><data key="na">Berdjiyum</data><data key="nb">Belgia</data><data key="zh-sg">比利时</data><data key="ne">बेल्जियम</data><data key="en-gb">Belgium</data><data key="nl">België</data><data key="udm">Бельгия</data><data key="nn">Belgia</data><data key="en-ca">Belgium</data><data key="nv">Bélgii Bikéyah</data><data key="kaa">Belgiya</data><data key="kab">Biljik</data><data key="oc">Belgica</data><data key="ang">Belgice</data><data key="sah">Бельгия</data><data key="krc">Бельгия</data><data key="ltg">Beļgeja</data><data key="om">Beeljiyeem</data><data key="or">ବେଲଜିଅମ</data><data key="os">Бельги</data><data key="bpy">বেলজিয়াম</data><data key="kbd">Белгэ</data><data key="srn">Belgikondre</data><data key="pa">ਬੈਲਜੀਅਮ</data><data key="csb">Belgijskô</data><data key="pl">Belgia</data></node> 
<node id="n420" labels=":Item"><data key="labels">:Item</data><data key="itemId">Q33</data></node> 
<node id="n406729" labels=":User"><data key="labels">:User</data><data key="hobbies"></data><data key="firstName">b</data><data key="imgPath">/uploads/b.png</data><data key="surName">b</data><data key="username">b</data><data key="gender">Male</data><data key="relaStatus">Single</data></node> 
<node id="n406731" labels=":User"><data key="labels">:User</data><data key="hobbies"></data><data key="blocked">[Ljava.lang.String;@3acfbc33</data><data key="firstName">c</data><data key="imgPath">/uploads/c.png</data><data key="surName">c</data><data key="username">c</data><data key="gender">Male</data><data key="relaStatus">Single</data></node> 
<node id="n406734" labels=":User"><data key="labels">:User</data><data key="hobbies"></data><data key="firstName">d</data><data key="imgPath">/uploads/d.png</data><data key="surName">d</data><data key="username">d</data><data key="gender">Male</data><data key="relaStatus">Single</data></node> 
<node id="n406736" labels=":User"><data key="labels">:User</data><data key="hobbies"></data><data key="firstName">e</data><data key="imgPath">/uploads/e.png</data><data key="surName">e</data><data key="username">e</data><data key="gender">Male</data><data key="relaStatus">Single</data></node> 
<edge id="e80" source="n32" target="n33" label="hasLabel"><data key="label">hasLabel</data></edge> 
<edge id="e602" source="n206" target="n207" label="hasLabel"><data key="label">hasLabel</data></edge> 
<edge id="e1416" source="n420" target="n421" label="hasLabel"><data key="label">hasLabel</data></edge> 
<edge id="e2069" source="n589" target="n590" label="hasLabel"><data key="label">hasLabel</data></edge> 
<edge id="e1223369" source="n406685" target="n406736" label="FRIEND_OF"><data key="label">FRIEND_OF</data></edge> 
<edge id="e1223370" source="n406699" target="n589" label="HAS_HOBBY"><data key="label">HAS_HOBBY</data></edge> 
<edge id="e1223371" source="n406687" target="n32" label="HAS_HOBBY"><data key="label">HAS_HOBBY</data></edge> 
<edge id="e1223372" source="n406687" target="n206" label="HAS_HOBBY"><data key="label">HAS_HOBBY</data></edge> 
<edge id="e1223373" source="n406731" target="n406687" label="FRIEND_OF"><data key="label">FRIEND_OF</data></edge> 
<edge id="e1223380" source="n406699" target="n420" label="HAS_HOBBY"><data key="label">HAS_HOBBY</data></edge> 
<edge id="e1223387" source="n406699" target="n206" label="HAS_HOBBY"><data key="label">HAS_HOBBY</data></edge> 
<edge id="e1223400" source="n406727" target="n406729" label="FRIEND_OF"><data key="label">FRIEND_OF</data></edge> 
<edge id="e1223403" source="n406727" target="n406731" label="FRIEND_OF"><data key="label">FRIEND_OF</data></edge> 
<edge id="e1223405" source="n406734" target="n406731" label="FRIEND_OF"><data key="label">FRIEND_OF</data></edge> 
<edge id="e1223407" source="n406734" target="n406736" label="FRIEND_OF"><data key="label">FRIEND_OF</data></edge> 
<edge id="e1223408" source="n406736" target="n406731" label="FRIEND_OF"><data key="label">FRIEND_OF</data></edge> 
    </graph> 
</graphml> 

私はthis含むSO上ここではいくつかのスレッドに走ったが、しかし、私はそれから解決策を偽造ことができませんでした。

私は自分のコードをチェックしようとしましたが、ちょうどそれを得ることができません - 私はいくつかの方法を試しました、主にノードをXPath // node [@labels = ':User']、しかし、私は失敗しました。

私はこの質問に対する良い答えは、XSLTを初めて使う将来の開発者にとっては素晴らしいことだと思って、学ぶために基本的なことをやろうとします。

ラベル= ':User'のノードだけを持つ入力から新しいGraphMLを作成してください。

お時間をいただきありがとうございます。

答えて

1

このテンプレートは、:Userというラベルが付いていない限り、nodeタグを除くすべてのXMLタグをコピーする必要があります。私はGraphMLについて何も知らないので、これは単なる騒動です。エッジノードを削除する必要があります。

EDIT<xsl:template match="ns:node">ns:プレフィックス、および<xsl:stylesheet>タグを追加する必要がありました。

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:ns="http://graphml.graphdrawing.org/xmlns" 
    xmlns="http://graphml.graphdrawing.org/xmlns" 
    exclude-result-prefixes="ns #default"> 

    <!--Identity template: default copy all content into the output --> 
    <xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
    </xsl:template> 

    <!-- Don't copy tags called 'node' --> 
    <xsl:template match="ns:node" /> 

    <!-- But do copy tags called 'node' if labelled ":User" --> 
    <xsl:template match="ns:node[@labels=':User']"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 

希望します。

+0

お返事ありがとうございます。しかし、これでXML全体がコピーされてしまいました。私は本当に理由を知らない。 – Zephyer

+0

''は、 "タグが' node'にマッチするとき、何もしません "。コピーしないでください。 'node'という名前のタグが' node() 'という関数と衝突するため、何か変なことが起こっていない限り... – AJNeufeld

+1

@Zephyer更新されたスタイルシート。それはもはやすべてのノードをコピーしません。 – AJNeufeld

関連する問題