XSLT - 仅将所需元素从 GraphML 复制到另一个 GraphML

XSLT - Copying only desired elements from GraphML to another GraphML

我一直在尝试将标签为“:User”的节点元素提取到新的 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>

我 运行 在 SO 上加入了几个线程,包括 this,但是我无法从中找到解决方案。

我尝试使用在线查看器来检查我的代码,但它无法正确执行 - 我尝试了几种方法,主要是尝试仅使用 XPath //node[@labels=':User'] , 但我没有成功。

我认为这个问题的一个很好的答案对于未来的 XSLT 新手和尝试做一些基本的事情以便学习的开发人员来说是很好的。

请帮我根据我的输入创建一个新的 GraphML,它只有带有标签=':User' 的节点。

感谢您的宝贵时间。

此模板应复制除 node 标签之外的所有 XML 标签,除非它们具有 :User 标签。我对 GraphML 一无所知,所以这只是一个噱头。您可能仍然需要删除边缘节点。

编辑:必须将 ns: 前缀添加到 <xsl:template match="ns:node"><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>

希望对您有所帮助。