如何使用 XSLT saxonica 将 xml 转换为点? [复制]
Posted
技术标签:
【中文标题】如何使用 XSLT saxonica 将 xml 转换为点? [复制]【英文标题】:How to convert xml to dot using XSLT saxonica? [duplicate] 【发布时间】:2021-12-29 22:28:18 【问题描述】:I have an xml code as shown below, The xml contains several elements, namely: id, parent menu, label, role id, role and items. in items there is 1 element, namely submenu, and in submenu there are 2 elements, namely url and label:
<?xml version="1.0" encoding="UTF-8"?>
<Import>
<Row>
<id>1</id> //this the id
<parentmenu>siasn-instansi</parentmenu> //this is the parent menu
<label>Layanan Profile ASN</label> //this is the label
<role_id>1</role_id> //this is the role id
<role>role:siasn-instansi:profilasn:viewprofil</role> //this is the role
<items>
<subMenu name = "pns"> //this is the Sub menu
<url>/tampilanData/pns</url> //this is the url
<label>Profile Pegawai</label> //this is the label
</subMenu>
<subMenu name = "pppk"> //this is the Sub menu
<url>/tampilanData/pppk</url> //this is the parent menu
<label>Profile Pegawai PPPK</label> //this is the label
</subMenu>
<subMenu name = "ppt"> //this is the Sub menu
<url>/tampilanData/JPTNonASN</url> //this is the url
<label>Profile Pegawai PPT Non-ASN</label> //this is the label
</subMenu>
</items>
</Row>
</Import>
下面的代码是xslt的代码,使用XSL语言和DOT语言规则。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" xmlns:dotml="http://www.martin-loetzsch.de/DOTML" version="1.0"> //xsl to transform to dot file
<xsl:template match="/">
<xsl:for-each select = "Import/Row">
<graph file-name="graphs/node">
<node id="<xsl:value:of select='role'>" label="role:siasn-instansi:profilasn:viewprofil" style="filled" fontsize="16"/> //in this case i wanna take the value in my xml code to take place in id on my element node in xsl
<node id="<xsl:value:of select='items/subMenu[@name="pns"]/url'>" label="/tampilanData/pns" style="filled" fontsize="16"/>
<node id="<xsl:value:of select='items/subMenu[@name="pppk"]/url'>" label="/tampilanData/pppk" style="filled" fontsize="16"/>
<node id="<xsl:value:of select='items/subMenu[@name="ppt"]/url'>" label="/tampilanData/JPTNonASN" style="filled" fontsize="16"/>
<edge from="<xsl:value:of select='role'>" to="<xsl:value:of select='items/subMenu[@name="pns"]/url'>" fontname="Arial" fontsize="9" label="Permit"/>
<edge from="<xsl:value:of select='role'>" to="<xsl:value:of select='items/subMenu[@name="pppk"]/url'>" fontname="Arial" fontsize="9" label="Permit"/>
<edge from="<xsl:value:of select='role'>" to="<xsl:value:of select='items/subMenu[@name="ppt"]/url'>" fontname="Arial" fontsize="9" label="Permit"/>
</graph>
<xsl:for-each>
</xsl:template>
</xsl:stylesheet>
xsl有2种元素,即:节点和边。在第一个节点上,我想在 xml 中的角色元素上获取角色值,并且我想将该值分配给我的 xsl 文档中的节点元素。其次,我想在 xml 文档的 pns 子菜单中获取 url 元素上的 url 值,并且我想将该值分配给我的 xsl 文档中的节点元素。其次,我想在 xml 文档的 pns 子菜单中获取 url 元素上的 url 值,并且我想将该值分配给我的 xsl 文档中的节点元素。第三,我想在 xml 文档的 pppk 子菜单中的 url 元素上获取 url 值,并且我想将该值分配给我的 xsl 文档中的节点元素。第四,我想获取xml文档中ppt子菜单中url元素上的url值,我想将该值赋给我的xsl文档元素中的node元素。
我有一个问题,当我使用 SAXONICA 转换我的 xml 文档时,我的 XSL 文档中出现错误,如下所示
C:\Users\rafif\Desktop\saxons>java -jar saxon-he-10.6.jar role-policy.xml role-policy.xsl -o:role-policy.dot 角色第 5 行第 27 列错误-policy.xsl:SXXP0003 XML 解析器报告的错误:与元素类型“节点”关联的属性“id”的值不能包含“
can you help me to fix my XSL code
【问题讨论】:
XML 中的注释是这样写的<!-- this is a comment -->
。当您为其他人发布代码时,请不要像//this is a comment
这样填写“cmets” - 这只会浪费他们的时间。另请注意,指令是xsl:value-of
,而不是xsl:value:of
。
【参考方案1】:
您不能将一个元素放在另一个元素的开始标签内。而不是:
<node id="<xsl:value:of select='role'>" label="role:siasn-instansi:profilasn:viewprofil" style="filled" fontsize="16"/>
使用任一:
<node label="role:siasn-instansi:profilasn:viewprofil" style="filled" fontsize="16">
<xsl:attribute name="id">
<xsl:value-of select='role'/>
</xsl:attribute>
</node>
或(见:https://www.w3.org/TR/1999/REC-xslt-19991116/#attribute-value-templates):
<node id="role" label="role:siasn-instansi:profilasn:viewprofil" style="filled" fontsize="16"/>
您还需要正确关闭<xsl:for-each>
元素。
【讨论】:
以上是关于如何使用 XSLT saxonica 将 xml 转换为点? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 saxonica 将 xml 转换为 graphviz
如何使用 saxonica 将 xml 转换为 graphviz