我已经实现了在应用程序初始化时使用XmlTextWriter创建下面的XML文件.
并且知道我不知道如何使用XmlDocument和XmlNode更新childNode id值.
是否有一些属性来更新id值?我试过InnerText但是失败了.谢谢.
<?xml version="1.0" encoding="UTF-8"?>
<Equipment xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<License licenseId="" licensePath=""/>
<DataCollections>
<GroupAIDs>
<AID id="100">
<Variable id="200"/>
<Variable id="201"/>
</AID>
<AID id="">
<Variable id="205"/>
</AID>
<AID id="102"/>
</GroupAIDs>
<GroupBIDs>
<BID id="2000">
<AID id="100"/>
</BID>
<BID id="2001">
<AID id="101"/>
<AID id="102"/>
</BID>
</GroupBIDs>
<GroupCIDs>
<BID id="8"/>
<BID id="9"/>
<BID id="10"/>
</GroupCIDs>
</DataCollections>
</Equipment>
Run Code Online (Sandbox Code Playgroud) 我的XML文件中有一个包含以下内容的节点:
<Apple>2011-12-01T16:33:33Z</Apple>
我希望采用这一行,并使用与上面所示相同的格式将其替换为当前日期和时间.
YYYY-MM-DDTHH:MM:SSZ
该节点位于声明为'x'的名称空间内
希望这是一个简单的知识问题,但我似乎在其他地方找不到答案。
在以下架构中定义元素会产生什么影响
<xs:element name"FooBar" />
Run Code Online (Sandbox Code Playgroud)
它会允许任何数据类型还是什么都不允许?
我有以下 XML,它可以以任一形式出现在我的 XML 文档中:
<Message xsi:schemaLocation="http://www.location.com StructureFile.xsd" xmlns=http://www.thenamespace.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
或者
<Message xmlns="http://www.thenamespace.com">
我需要输出为:
<Message xmlns="http://www.theNEWnamespace.com">
我目前有这个模板来处理两种 xml 可能性的较短版本:
<xsl:template match="*">
<xsl:element name="{name()}" namespace="http://www.theNEWnamespace.com">
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
但是,这不会删除 xml 的 SchemeLocation 或 xmlns:xsi 部分(如果存在)。
我将如何调整上述内容来处理这两种可能性。
干杯,
编辑:XML结构:
<?xml version="1.0" encoding="utf-8"?>
<Message xsi:schemaLocation="http://www.location.com StructureFile.xsd" xmlns="http://www.thenamespace.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Header>
<Info></Info>
</Header>
</Message>
Run Code Online (Sandbox Code Playgroud) 我正在使用微软的XSLT处理器(仅限1.0)
XML开头行:
<?xml version="1.0" encoding="utf-8"?>
<Header xmlns="http:\\OldNameSpace.com">
<Detail>
Run Code Online (Sandbox Code Playgroud)
使用以下XSLT模板来获取<Header>文档的元素并更改其命名空间.
<xsl:template match="*">
<xsl:element name="{name()}" xmlns="http:\\NewNameSpace.com">
<xsl:copy-of select="@*"/>
<xsl:apply-templates />
</xsl:element>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
果然<Header xmlns="http:\\OldNameSpace.com">进入<Header xmlns="http:\\NewNameSpace.com">
但是我现在需要为此添加第二个命名空间,以便获得以下输出:
<Header xmlns="NewNameSpace.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
Run Code Online (Sandbox Code Playgroud)
我尝试过使用:
<xsl:template match="*">
<xsl:element name="{name()}" xmlns="NewNameSpace.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsl:copy-of select="@*"/>
<xsl:apply-templates />
</xsl:element>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
但是,我仍然只获得与原始XSLT模板相同的输出.
任何人都可以告诉我为什么这是?
我有XML,如下所示
<NodeName Foo="True" Foobar="False" />
<NodeName Foo="False" Foobar="False" />
<NodeName Foo="True" Foobar="False" />
Run Code Online (Sandbox Code Playgroud)
我正在查询这个以使用以下方法找到具有Foo值'True'的NodeName:
.Where(node => node.Attribute("Foo").Value = "True");
Run Code Online (Sandbox Code Playgroud)
但是,属性Foo可能不存在,这会导致异常.
问题是如何实现逻辑来检查属性是否存在,然后检查值是否存在?
我已经尝试了以下但是不确定在else括号中返回什么,因为目前它不会编译错误,不会在所有路径上返回值.
.Where(node =>
{
if (node.Attribute("Foo") != null)
{
node.Attribute("Foo").Value == "True";
}
else { }
});
Run Code Online (Sandbox Code Playgroud) xml ×5
xslt ×3
c# ×2
datetime ×1
lambda ×1
linq-to-xml ×1
namespaces ×1
xmldocument ×1
xmlnode ×1
xpath ×1
xsd ×1