| File: XmlLocators.cs | Web Access |
| Project: src\xdt\src\Microsoft.Web.XmlTransform\Microsoft.Web.XmlTransform.csproj (Microsoft.Web.XmlTransform) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using System.Collections.Generic; using System.Text; using System.Xml; using System.Globalization; using Microsoft.Web.XmlTransform.Properties; namespace Microsoft.Web.XmlTransform { internal sealed class DefaultLocator : Locator { // Uses all the default behavior private static DefaultLocator instance = null; internal static DefaultLocator Instance { get { if (instance == null) { instance = new DefaultLocator(); } return instance; } } } public sealed class Match : Locator { protected override string ConstructPredicate() { EnsureArguments(1); string keyPredicate = null; foreach (string key in Arguments) { XmlAttribute keyAttribute = CurrentElement.Attributes.GetNamedItem(key) as XmlAttribute; if (keyAttribute != null) { string keySegment = String.Format(CultureInfo.InvariantCulture, "@{0}='{1}'", keyAttribute.Name, keyAttribute.Value); if (keyPredicate == null) { keyPredicate = keySegment; } else { keyPredicate = String.Concat(keyPredicate, " and ", keySegment); } } else { throw new XmlTransformationException(string.Format(System.Globalization.CultureInfo.CurrentCulture,Resources.XMLTRANSFORMATION_MatchAttributeDoesNotExist, key)); } } return keyPredicate; } } public sealed class Condition : Locator { protected override string ConstructPredicate() { EnsureArguments(1, 1); return Arguments[0]; } } public sealed class XPath : Locator { protected override string ParentPath { get { return ConstructPath(); } } protected override string ConstructPath() { EnsureArguments(1, 1); string xpath = Arguments[0]; if (!xpath.StartsWith("/", StringComparison.Ordinal)) { // Relative XPath xpath = AppendStep(base.ParentPath, NextStepNodeTest); xpath = AppendStep(xpath, Arguments[0]); xpath = xpath.Replace("/./", "/"); } return xpath; } } }