我有两个需要的服务XPathDocument
.我希望能够定义XPathDocumnet
在两个服务的配置中使用的命名实例.我也希望能够告诉StuctureMap使用哪个构造函数XPathDocument
.当我尝试获取XPathDocument
它的实例时告诉我它无法找到插件类型XmlReader
.我想使用需要字符串uri的构造函数来获取xml文件.我似乎无法让这个工作.这是StructureMap配置代码.
public class Service1 : IService1 {
public Service1(XPathDocument document) {}
}
public class Service2 : IService2 {
public Service2(XPathDocument document) {}
}
public class Registry1 : Registry {
ForRequestedType<IService1>().TheDefault.Is.OfConcreteType<Service1>()
.CtorDependency<XPathDocument>()
.Is(x => x.TheInstanceNamed("XPathDocument1"));
ForRequestedType<IService2>().TheDefault.Is.OfConcreteType<Service2>()
.CtorDependency<XPathDocument>()
.Is(x => x.TheInstanceNamed("XPathDocument2"));
ForRequestedType<XPathDocument>().AddInstances(x => {
x.OfConcreteType<XPathDocument>()
.WithCtorArg("uri").EqualToAppSetting("XmlFile1")
.WithName("XPathDocument1");
x.OfConcreteType<XPathDocument>()
.WithCtorArg("uri").EqualToAppSetting("XmlFile2")
.WithName("XPathDocument2");
});
}
Run Code Online (Sandbox Code Playgroud) 有没有办法构建一个XPath查询,在某个位置找到一个节点并具有某个属性值?
请考虑以下示例xml:
<Item Type="Book">
<!--1st Param node in a Book item is always the autors last name-->
<Param Value="Updike" />
<!--2nd Param node in a Book item is always the autors first name-->
<Param Value="John" />
<!--3rd Param node in a Book item is always the book title-->
<Param Value="Toward the End of Time" /></Item>
Run Code Online (Sandbox Code Playgroud)
现在我可以构建一个查找以下内容的查询:
找到所有项目的节点类型,其中第2个"书" 帕拉姆节点都有一个值 "约翰"的.所以我想找到作者名字的所有书籍都是"约翰".
请注意,我使用的是.NET XPathDocument.
我正在尝试解析远程XML文档(来自Amazon AWS):
<ItemLookupResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2009-03-31">
<OperationRequest>
<RequestId>011d32c5-4fab-4c7d-8785-ac48b9bda6da</RequestId>
<Arguments>
<Argument Name="Condition" Value="New"></Argument>
<Argument Name="Operation" Value="ItemLookup"></Argument>
<Argument Name="Service" Value="AWSECommerceService"></Argument>
<Argument Name="Signature" Value="73l8oLJhITTsWtHxsdrS3BMKsdf01n37PE8u/XCbsJM="></Argument>
<Argument Name="MerchantId" Value="Amazon"></Argument>
<Argument Name="Version" Value="2009-03-31"></Argument>
<Argument Name="ItemId" Value="603084260089"></Argument>
<Argument Name="IdType" Value="UPC"></Argument>
<Argument Name="AWSAccessKeyId" Value="[myAccessKey]"></Argument>
<Argument Name="Timestamp" Value="2010-06-14T15:03:27Z"></Argument>
<Argument Name="ResponseGroup" Value="OfferSummary,ItemAttributes"></Argument>
<Argument Name="SearchIndex" Value="All"></Argument>
</Arguments>
<RequestProcessingTime>0.0318510000000000</RequestProcessingTime>
</OperationRequest>
<Items>
<Request>
<IsValid>True</IsValid>
<ItemLookupRequest>
<Condition>New</Condition>
<DeliveryMethod>Ship</DeliveryMethod>
<IdType>UPC</IdType>
<MerchantId>Amazon</MerchantId>
<OfferPage>1</OfferPage>
<ItemId>603084260089</ItemId>
<ResponseGroup>OfferSummary</ResponseGroup>
<ResponseGroup>ItemAttributes</ResponseGroup>
<ReviewPage>1</ReviewPage>
<ReviewSort>-SubmissionDate</ReviewSort>
<SearchIndex>All</SearchIndex>
<VariationPage>All</VariationPage>
</ItemLookupRequest>
</Request>
<Item>
<ASIN>B0000UTUNI</ASIN>
<DetailPageURL>http://www.amazon.com/Garnier-Fructis-Fortifying-Conditioner-Minute/dp/B0000UTUNI%3FSubscriptionId%3DAKIAIYPTKHCWTRWWPWBQ%26tag%3Dws%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB0000UTUNI</DetailPageURL>
<ItemLinks>
<ItemLink>
<Description>Technical Details</Description>
<URL>http://www.amazon.com/Garnier-Fructis-Fortifying-Conditioner-Minute/dp/tech-data/B0000UTUNI%3FSubscriptionId%3DAKIAIYPTKHCWTRWWPWBQ%26tag%3Dws%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386001%26creativeASIN%3DB0000UTUNI</URL>
</ItemLink>
<ItemLink>
<Description>Add To Baby Registry</Description>
<URL>http://www.amazon.com/gp/registry/baby/add-item.html%3Fasin.0%3DB0000UTUNI%26SubscriptionId%3DAKIAIYPTKHCWTRWWPWBQ%26tag%3Dws%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386001%26creativeASIN%3DB0000UTUNI</URL>
</ItemLink> …
Run Code Online (Sandbox Code Playgroud)