Xml XHtml转换-复制heaeder元素的嵌套子元素
将修改现有xml以包含标题部分。我正试图将“Header”元素的嵌套子元素“原样”复制到另一个xml文件中,但未能成功 带标头元素的Xml:Xml XHtml转换-复制heaeder元素的嵌套子元素,xml,xslt,Xml,Xslt,将修改现有xml以包含标题部分。我正试图将“Header”元素的嵌套子元素“原样”复制到另一个xml文件中,但未能成功 带标头元素的Xml: <?xml version="1.0" encoding="utf-8"?> <QuestionText xmlns:t="clr-namespace:Telerik.Windows.Documents.Model;assembly=Telerik.Windows.Documents" xmlns:s="clr-namespace
<?xml version="1.0" encoding="utf-8"?>
<QuestionText
xmlns:t="clr-namespace:Telerik.Windows.Documents.Model;assembly=Telerik.Windows.Documents"
xmlns:s="clr-namespace:Telerik.Windows.Documents.Model.Styles;assembly=Telerik.Windows.Documents"
xmlns:r="clr-namespace:Telerik.Windows.Documents.Model.Revisions;assembly=Telerik.Windows.Documents"
xmlns:n="clr-namespace:Telerik.Windows.Documents.Model.Notes;assembly=Telerik.Windows.Documents"
xmlns:th="clr-namespace:Telerik.Windows.Documents.Model.Themes;assembly=Telerik.Windows.Documents"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:msxsl="urn:schemas-microsoft-com:xslt">
**<Header>
<t:SubHeader SubHeaderAtt1="valA" SubHeaderAtt2="valB">
<t:SubSubHeader SubSubHeaderAtt1="valX" SubSubHeaderAtt2="valY">
</t:SubSubHeader>
</t:SubHeader>
<t:SubHeader SubHeaderAtt1="valC" SubHeaderAtt2="valD">
<t:SubSubHeader SubSubHeaderAtt1="valM" SubSubHeaderAtt2="valN">
</t:SubSubHeader>
</t:SubHeader>
</Header>**
<Content>
<p ListId="2" xmlns="">
<span StyleName="ss">Item 1</span>
</p>
<p ListId="2" xmlns="">
<span>Item 2</span>
</p>
<p ListId="2" xmlns="">
<span>Item 3</span>
</p>
<p ListId="3" xmlns="" />
</Content>
</QuestionText>
**
**
项目1
项目2
项目3
要复制标头的XSD:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
xmlns:t="clr-namespace:Telerik.Windows.Documents.Model;assembly=Telerik.Windows.Documents"
xmlns:s="clr-namespace:Telerik.Windows.Documents.Model.Styles;assembly=Telerik.Windows.Documents"
xmlns:r="clr-namespace:Telerik.Windows.Documents.Model.Revisions;assembly=Telerik.Windows.Documents"
xmlns:n="clr-namespace:Telerik.Windows.Documents.Model.Notes;assembly=Telerik.Windows.Documents"
xmlns:th="clr-namespace:Telerik.Windows.Documents.Model.Themes;assembly=Telerik.Windows.Documents">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="QuestionText">
<t:RadDocument>
<xsl:copy>
<xsl:value-of select="Header/node()"/>
</xsl:copy>
<t:Section>
<!-- Avoided for brevity -->
</t:Section>
</t:RadDocument>
</xsl:template>
</xsl:stylesheet>
预期产出:
<?xml version="1.0" encoding="utf-8"?>
<t:RadDocument xmlns:t="clr-namespace:Telerik.Windows.Documents.Model;assembly=Telerik.Windows.Documents"
xmlns:s="clr-namespace:Telerik.Windows.Documents.Model.Styles;assembly=Telerik.Windows.Documents"
xmlns:r="clr-namespace:Telerik.Windows.Documents.Model.Revisions;assembly=Telerik.Windows.Documents"
xmlns:n="clr-namespace:Telerik.Windows.Documents.Model.Notes;assembly=Telerik.Windows.Documents"
xmlns:th="clr-namespace:Telerik.Windows.Documents.Model.Themes;assembly=Telerik.Windows.Documents"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:msxsl="urn:schemas-microsoft-com:xslt">
<t:SubHeader SubHeaderAtt1="valA" SubHeaderAtt2="valB">
<t:SubSubHeader SubSubHeaderAtt1="valX" SubSubHeaderAtt2="valY">
</t:SubSubHeader>
</t:SubHeader>
<t:SubHeader SubHeaderAtt1="valC" SubHeaderAtt2="valD">
<t:SubSubHeader SubSubHeaderAtt1="valM" SubSubHeaderAtt2="valN">
</t:SubSubHeader>
</t:SubHeader>
<t:Section>
<!-- Avoided for brevity -->
</t:Section>
</t:RadDocument>
如果有人能解释我遗漏了什么或如何解决问题,我将不胜感激。任何帮助都可以。该xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation“
在输入文档的根元素上表示QuestionText
和Header
元素在此命名空间中。所以
<xsl:template match="QuestionText">
非常感谢。有没有办法避免对元素使用前缀?我以前使用过xslt,但从未使用过前缀。@teenboy您不必为元素使用前缀。您只需在样式表中定义一个前缀,用于XPath表达式和匹配模式。XPath在名称空间格式良好的XML上运行,它只关心本地名称和名称空间URI。原始文档中使用的前缀(或缺少前缀)和XPath表达式中使用的前缀不必相同,它们只需在各自的位置映射到相同的URI。
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="xamlp msxsl"
xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:xamlp="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
xmlns:t="clr-namespace:Telerik.Windows.Documents.Model;assembly=Telerik.Windows.Documents"
xmlns:s="clr-namespace:Telerik.Windows.Documents.Model.Styles;assembly=Telerik.Windows.Documents"
xmlns:r="clr-namespace:Telerik.Windows.Documents.Model.Revisions;assembly=Telerik.Windows.Documents"
xmlns:n="clr-namespace:Telerik.Windows.Documents.Model.Notes;assembly=Telerik.Windows.Documents"
xmlns:th="clr-namespace:Telerik.Windows.Documents.Model.Themes;assembly=Telerik.Windows.Documents">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="xamlp:QuestionText">
<t:RadDocument>
<xsl:copy-of select="xamlp:Header/node()"/>
<t:Section>
<!-- Avoided for brevity -->
</t:Section>
</t:RadDocument>
</xsl:template>
</xsl:stylesheet>