我有这样一个Xml文件:
<Configuration xmlns="http://schemas.benefittech.com/evolution/site">
<SiteSettings>
<ProfileGroup>TBOLoanPmtElection</ProfileGroup>
<AWSGroup>TBOLoanPmtElection_Admin</AWSGroup>
</SiteSettings>
</Configuration>我有一个这样的XSD文件:
<?xml version="1.0" encoding="us-ascii" ?>
<xs:schema elementFormDefault="qualified" attributeFormDefault="unqualified" version="5.0"
xmlns="http://schemas.benefittech.com/evolution/site" targetNamespace="http://schemas.benefittech.com/evolution/site"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:vs="http://schemas.benefittech.com/Visual-Studio-Intellisense" vs:friendlyname="Evolution Site Configuration">
<xs:element name="Configuration">
<xs:complexType>
<xs:all>
<xs:element name="SiteSettings" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:all>
<xs:element name="AWSGroup" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="ProfileGroup" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="LogActivityGroup" type="xs:string" minOccurs="0" maxOccurs="1"/>
</xs:all>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>我希望使我的Xml看起来类似于下面的内容,以允许‘环境重写’( env:*元素上的E属性):
<Configuration xmlns="http://schemas.benefittech.com/evolution/site" xmlns:env="http://schemas.benefittech.com/evolution/siteenvironment">
<SiteSettings>
<ProfileGroup>TBOLoanPmtElection</ProfileGroup>
<AWSGroup>TBOLoanPmtElection_Admin</AWSGroup>
<env:AWSGroup E="SecondEnvironment">TBOLoanPmtElection2_Admin</env:AWSGroup>
</SiteSettings>
</Configuration>是否有一种方法可以修改XSD,以便给定配置中的每个元素,我也希望有一个env:*版本的XSD。我是否必须像下面这样创建一个新的模式文件,除了目标名称空间之外,它基本上是原始模式的副本?
<?xml version="1.0" encoding="us-ascii" ?>
<xs:schema elementFormDefault="qualified" attributeFormDefault="unqualified" version="5.0"
xmlns="http://schemas.benefittech.com/evolution/siteenvironment" targetNamespace="http://schemas.benefittech.com/evolution/siteenvironment"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:vs="http://schemas.benefittech.com/Visual-Studio-Intellisense" vs:friendlyname="Evolution Site Configuration">
<xs:element name="Configuration">
<xs:complexType>
<xs:all>
<xs:element name="SiteSettings" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:all>
<xs:element name="AWSGroup" type="xs:string" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:attribute name="E" use="required" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="ProfileGroup" type="xs:string" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:attribute name="E" use="required" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="LogActivityGroup" type="xs:string" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:attribute name="E" use="required" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>发布于 2020-05-03 19:39:30
是否有一种方法来修改XSD,以便给出我配置中的每个元素,我想要它的env:*版本。
不,没有优雅的方法在每个元素之后添加一个可选元素,该元素具有相同的名称,但具有不同的命名空间。您需要分别添加每个这样的env:*元素。
,我是否必须像下面这样创建一个新的模式文件,除了目标名称空间之外,它基本上是原始模式的副本?
是的,但前提是您必须坚持对“扩展”元素使用不同的命名空间的计划。你在回答我的评论时说
,我想我需要单独的名称空间。我不想在所有选择元素的地方更改代码。例如,SiteConfig.Elements( "SiteSettings“).Elements( "AWSGroup”).FirstOrDefault();将继续工作,而不提取env:*元素。然后,在发布过程中,我会在任何地方交换env:*属性,代码就可以正常工作了。你的建议呢?
我几乎没有写过一行C#,但是根据https://learn.microsoft.com/en-us/dotnet/api/system.linq.enumerable.firstordefault?view=netcore-3.1,FirstOrDefault()方法返回序列中的第一个元素或默认值。所以我认为有一种更简单的方法不会破坏现有的代码.
对于每个需要有选项扩展元素的元素:
该属性的名称"E“并不理想--如果可能的话,我会选择更具有描述性的内容。
https://stackoverflow.com/questions/61528959
复制相似问题