XMLで行うことはすべて、大文字と小文字が区別されます。大文字と小文字を区別しないXMLパーサC#
しかし、今私は何らかの形でxml名/属性の認識に大文字小文字を区別しないと、私が書いているソフトウェアでエラーが少なくなる状況にいると思います。大文字と小文字を区別しないXPathは送信される神です。
C#でこれを行う簡単な方法/ライブラリはありますか?
XMLで行うことはすべて、大文字と小文字が区別されます。大文字と小文字を区別しないXMLパーサC#
しかし、今私は何らかの形でxml名/属性の認識に大文字小文字を区別しないと、私が書いているソフトウェアでエラーが少なくなる状況にいると思います。大文字と小文字を区別しないXPathは送信される神です。
C#でこれを行う簡単な方法/ライブラリはありますか?
を作成することができます:MyName
とmyName
- 異なることを意図しています。それらを同じ名前に変換/処理することは、大きな結果をもたらす可能性があるエラーです。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:variable name="vUpper" select=
"'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
<xsl:variable name="vLower" select=
"'abcdefghijklmnopqrstuvwxyz'"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[name()=local-name()]" priority="2">
<xsl:element name="{translate(name(), $vUpper, $vLower)}"
namespace="{namespace-uri()}">
<xsl:apply-templates select="node()|@*"/>
</xsl:element>
</xsl:template>
<xsl:template match="*" priority="1">
<xsl:element name=
"{substring-before(name(), ':')}:{translate(local-name(), $vUpper, $vLower)}"
namespace="{namespace-uri()}">
<xsl:apply-templates select="node()|@*"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*[name()=local-name()]" priority="2">
<xsl:attribute name="{translate(name(), $vUpper, $vLower)}"
namespace="{namespace-uri()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<xsl:template match="@*" priority="1">
<xsl:attribute name=
"{substring-before(name(), ':')}:{translate(local-name(), $vUpper, $vLower)}"
namespace="{namespace-uri()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
:上記が当てはまらない場合に
は、次いで、ここでのみ、小文字の要素名と小文字の属性名を有するものに文書を処理するXSLTを使用して、より正確な解決策でありますこの変換は、この1例えば、任意のXML文書に適用されます。
<authors xmlns:user="myNamespace">
<?ttt This is a PI ?>
<Author xmlns:user2="myNamespace2">
<Name idd="VH">Victor Hugo</Name>
<user2:Name idd="VH">Victor Hugo</user2:Name>
<Nationality xmlns:user3="myNamespace3">French</Nationality>
</Author>
<!-- This is a very long comment the purpose is
to test the default stylesheet for long comments-->
<Author Period="classical">
<Name>Sophocles</Name>
<Nationality>Greek</Nationality>
</Author>
<author>
<Name>Leo Tolstoy</Name>
<Nationality>Russian</Nationality>
</author>
<Author>
<Name>Alexander Pushkin</Name>
<Nationality>Russian</Nationality>
</Author>
<Author Period="classical">
<Name>Plato</Name>
<Nationality>Greek</Nationality>
</Author>
</authors>
指名手配、正しい結果(要素や属性名C小文字にonverted)はが生成されます
<authors><?ttt This is a PI ?>
<author>
<name idd="VH">Victor Hugo</name>
<user2:name xmlns:user2="myNamespace2" idd="VH">Victor Hugo</user2:name>
<nationality>French</nationality>
</author><!-- This is a very long comment the purpose is
to test the default stylesheet for long comments-->
<author period="classical">
<name>Sophocles</name>
<nationality>Greek</nationality>
</author>
<author>
<name>Leo Tolstoy</name>
<nationality>Russian</nationality>
</author>
<author>
<name>Alexander Pushkin</name>
<nationality>Russian</nationality>
</author>
<author period="classical">
<name>Plato</name>
<nationality>Greek</nationality>
</author>
</authors>
文書は、ご希望の形式に変換されたら、あなたは変換された文書に任意の処理を実行することができます。
はかなり見えます。 –
@ArsenZahray:ようこそ。 –
XMLはテキストです。使用しているパーサーにロードする前にちょうどToLower
にしてください。
スキーマに対して検証する必要がなく、値がすべて小文字であることに気をつけない限り、これはうまくいくはずです。
事実は、任意のXMLパーサーが大文字と小文字を区別になるということです。そうでなければ、XMLパーサではありません。
あなたは、XML文書がそれぞれという名前の2つの異なる要素持つことができ、大文字と小文字を区別しない方法(ユーザビリティの拡張子)、例えば:
public static class XDocumentExtensions
{
public static IEnumerable<XElement> ElementsCaseInsensitive(this XContainer source,
XName name)
{
return source.Elements()
.Where(e => e.Name.Namespace == name.Namespace
&& e.Name.LocalName.Equals(name.LocalName, StringComparison.OrdinalIgnoreCase));
}
}
まず、すべてのタグと属性名を小文字に変換し、値をそのままにして、SAX
の解析を使用します。 XmlTextReader
となります。
しかし、あなたは 'XElement.Parse(xmlText.Tolower())'を実行することができます。 –
XMlドキュメントは、それぞれ異なる名前の2つの*異なる*要素を持つことができます: 'MyName'と' myName'。それらを同じ名前に変換/処理することは、大きな結果をもたらす可能性があるエラーです。 –