gpt4 book ai didi

xml - XSLT:将 namespace 设置为第一个属性

转载 作者:数据小太阳 更新时间:2023-10-29 02:09:24 24 4
gpt4 key购买 nike

xsl 转换后结果 xml 文件中的命名空间位置有问题。

我的转换样式表看起来像

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsl:output indent="yes" method="xml" />
<xsl:template match="/">

<xsl:element name="SmartDriveUpdates">
<xsl:attribute name="xsi:noNamespaceSchemaLocation">
<xsl:text>LightSpeedXMLSchema.xsd</xsl:text>
</xsl:attribute>
...
</xsl:element>

在输出 xml 文件中,我想获取根节点作为

<SmartDriveUpdates xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="LightSpeedXMLSchema.xsd">

但是我有

<SmartDriveUpdates xsi:noNamespaceSchemaLocation="LightSpeedXMLSchema.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

我还尝试将 xsl 样式表中的根节点预编码为

<SmartDriveUpdates xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="LightSpeedXMLSchema.xsd">
...
</SmartDriveUpdates>

但我得到了同样错误的结果。

使用 system.xml.xsl.xslcompiledtransform .NET 类中的 Transform 方法将转换应用于 xml 文件。为此,我使用 PowerShell:

Function Convert-WithXslt($originalXmlFilePath, $xslFilePath, $outputFilePath) {
## Simplistic error handling
$xslFilePath = Resolve-Path $xslFilePath
If( -not (Test-Path $xslFilePath) ) {
Throw "Can't find the XSL file"
}

$originalXmlFilePath = Resolve-Path $originalXmlFilePath
If( -not (Test-Path $originalXmlFilePath) ) {
Throw "Can't find the XML file"
}

#$outputFilePath = Resolve-Path $outputFilePath
If( -not (Test-Path (Split-Path $originalXmlFilePath)) ) {
Throw "Can't find the output folder"
}

## Get an XSL Transform object (try for the new .Net 3.5 version first)
$EAP = $ErrorActionPreference
$ErrorActionPreference = "SilentlyContinue"

$script:xslt = New-Object system.xml.xsl.xslcompiledtransform
Trap [System.Management.Automation.PSArgumentException]
{ # no 3.5, use the slower 2.0 one
$ErrorActionPreference = $EAP
$script:xslt = New-Object system.xml.xsl.xsltransform
}
$ErrorActionPreference = $EAP

## load xslt file
$xslt.load( $xslFilePath )

## transform
$xslt.Transform( $originalXmlFilePath, $outputFilePath )
}

有人可以帮我解决这个问题吗?

谢谢

最佳答案

属性和 namespace 声明属性的顺序并不重要,我认为您在使用 XSLT 时无法定义该顺序。为什么顺序对您很重要?

关于xml - XSLT:将 namespace 设置为第一个属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5324948/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com